导致'错误的原因:1408D172:SSL例程:SSL3_GET_KEY_EXCHANGE:错误的签名类型' SSL错误?

时间:2015-04-30 03:12:10

标签: php ssl curl soap openssl

在尝试从命令行上的SOAP Web服务获取WSDL时,我从CURL获得以下输出(这用于测试基本连接)。

服务器特定信息已被编辑,因为它属于供应商。该供应商称他们没有收到其他用户的类似报告。

curl -v WEB-SERVICE-URL                                                                     Hostname was NOT found in DNS cache
Trying WEB-SERVICE-HOST-IP...
Connected to WEB-SERVICE-HOST-NAME (WEB-SERVICE-HOST-IP) port 443 (#0)
successfully set certificate verify locations:
CAfile: none
CApath: /etc/ssl/certs
SSLv3, TLS handshake, Client hello (1):
SSLv3, TLS handshake, Server hello (2):
SSLv3, TLS handshake, CERT (11):
SSLv3, TLS handshake, Server key exchange (12):
SSLv3, TLS alert, Server hello (2):
error:1408D172:SSL routines:SSL3_GET_KEY_EXCHANGE:wrong signature type
Closing connection 0
curl: (35) error:1408D172:SSL routines:SSL3_GET_KEY_EXCHANGE:wrong signature type

我从Ubuntu 14.04框中运行此命令,下面是curl和openssl版本信息。

curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3
    pop3s rtmp rtsp smtp smtps telnet tftp 
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

错误似乎相当模糊,谷歌搜索结果很少。

如果我指定--tlsv1.1选项,curl命令适用于Ubuntu 14.04,因此问题似乎是特定于TLSv1.2(它也适用于没有该选项的Ubuntu 13.04,因为它默认为TLSv1.1) 。

我还测试过通过SoapUI访问WSDL,这适用于Ubuntu 14.04,我想这是有效的,因为SoapUI是Java而且不是使用Openssl?。由于这一点和TLSv1.1工作,我不相信这个问题是由防火墙或代理引起的。

TLSv1.2似乎也是PHP SoapClient的默认设置,当使用WSDL加载它时我得到failed to load external entity错误,我认为这些错误是由与curl调用相同的问题引起的。

如果我能找到一种强制SoapClient使用TLSv1.1的方法,那么这将是一个有效的解决办法,但是看起来你只能通过创建启用了特定密码的流上下文来实现这一点,我试过这个但是到目前为止没有运气。

其他替代方法是实现Soap集成,避免使用Openssl,或者允许我指定TLS版本。

由于14.04是LTS我会期待这项工作,如果问题出在Openssl上,我想深究它,任何人都有任何想法吗?

修改

使用s_client我会在错误消息中获得更多信息。

139860433102496:error:1408D172:SSL routines:SSL3_GET_KEY_EXCHANGE:wrong signature type:s3_clnt.c:1765:

这表示在openssl代码中抛出了here错误。

修改2

SoapUI使用的密码(成功)是      TLS_DHE_RSA_WITH_AES_128_CBC_SHA , looking at the result of openssl密码

我无法看到等效的密码。

编辑3

以下命令openssl s_client -tls1_2 -cipher DHE-RSA-AES128-SHA -prexit -connect生成以下结尾的输出。

New, (NONE), Cipher is (NONE)
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol  : TLSv1.2
Cipher    : 0000
Session-ID: 3ED4F6AB3EAD9BAD50059F9881951D2A759DC10FA1108B3107EA3374CC4922EE
Session-ID-ctx: 
Master-Key: 
Key-Arg   : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1430373464
Timeout   : 7200 (sec)
Verify return code: 0 (ok)

1 个答案:

答案 0 :(得分:1)

为了完整性而回答,TLSv1.2在我与供应商一起提出后第二天就开始工作了,他们后来证实这是服务器方面的问题。