我在连接到https://test.salesforce.com的 SOAP 服务时遇到了一些问题。我使用基于 PHP 原生 SoapClient 的 Toolkit-for-PHP v20.0 (https://github.com/developerforce/Force.com-Toolkit-for-PHP)。
软件:
- macOS 10.8
- 麦克波特 2.1.2
- PHP 5.3.15
- OpenSSL 1.0.1_c
我在 30 秒后收到的唯一错误消息(超时?)是:
[SoapFault]
Could not connect to host
奇怪的是,连接到http://test.salesforce.com(没有 SSL)或连接到https://login.salesforce.com(使用 SSL)按预期工作。
我什至设法使用soapUI登录到https://test.salesforce.com 。
所以我的猜测是肯定有一些认证/握手问题,但我不知道如何获得更详细的错误消息或如何更改有关工具包设置的任何内容。我搜索了 google、stackoverflow 和 SalesForce 讨论板,但似乎没有人遇到这个特定的沙箱+SSL 问题。
有谁知道如何调试这个问题?
好的,我认为这是 macports 的 openssl 二进制文件的问题。显然,握手失败是因为我的客户端正在尝试服务器不理解的 SSLv2/SSLv3 握手。
openssl s_client -connect test.salesforce.com:443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
[...end...]
与强制 SSLv3 相同的命令:
openssl s_client -ssl3 -connect test.salesforce.com:443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=1 O = VeriSign Trust Network, OU = "VeriSign, Inc.", OU = VeriSign International Server CA - Class 3, OU = www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
verify error:num=20:unable to get local issuer certificate
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
[...and so forth...]
不太确定该怎么做... SalesForce toolkit-for-php 使用 PHP 的本机 SoapClient,我不知道如何强制它使用 SSLv3。