我在连接到SOAP服务时遇到一些问题https://test.salesforce.com.我使用PHP v20.00工具包(https://github.com/developerforce/Force.com-Toolkit-for-PHP)它基于PHP的原生SoapClient。
软件:
- MacOS 10.8
- Macports 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)按预期工作。
我甚至设法登录https://test.salesforce.com使用soapUI。
因此,我猜测肯定存在一些认证/握手问题,但我不知道如何获得更详细的错误消息,也不知道如何更改工具包设置。我搜索了谷歌、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...]
真的不知道该从中得到什么。。。php的SalesForce工具包使用php的原生SoapClient,我不知道如何强制它使用SSLv3。
这是最新版本的openssl 1.0.1:的macports端口的一个已知错误
http://trac.macports.org/ticket/33715
可能的解决方案:安装较旧的openssl版本,在本例中为openssl 1.0.0h:
cd /opt/local/src
sudo svn checkout -r 90715 http://svn.macports.org/repository/macports/trunk/dports/devel/openssl
cd openssl
sudo port install
取自:
- https://trac.macports.org/wiki/howto/InstallingOlderPort
- http://trac.macports.org/ticket/33715#comment:30