- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
尝试从命令行上的 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 box 运行此命令,下面是 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,那么这将是一个有效的解决方法,但是看起来你只能通过创建一个启用了特定密码的流上下文来做到这一点,我已经尝试过这个但是到目前为止没有运气。
其他替代方案是实现一个避免 Openssl 或允许我指定 TLS 版本的 Soap 集成。
由于 14.04 是一个 LTS,我希望它能正常工作,如果问题出在 Openssl 上,我想深入了解它,有人有什么想法吗?
编辑
使用 s_client 我在错误消息中获得了更多信息。
139860433102496:error:1408D172:SSL routines:SSL3_GET_KEY_EXCHANGE:wrong signature type:s3_clnt.c:1765:
这表示正在抛出错误 here在 openssl 代码中。
编辑2
SoapUI 使用(成功)的密码是 TLS_DHE_RSA_WITH_AES_128_CBC_SHA,查看结果
openssl ciphers
我看不到等效的密码。
编辑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)
最佳答案
为了完整起见,TLSv1.2 在我向供应商提出后第二天开始工作,他们后来确认这是服务器端问题。
关于php - 是什么导致 'error:1408D172:SSL routines:SSL3_GET_KEY_EXCHANGE:wrong signature type' SSL 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958371/
我是一名优秀的程序员,十分优秀!