我正在启动一个服务器:
openssl s_server -accept 8888 -cert server.de.crt -key server.de.key -state -cipher 'ECDHE-RSA-AES128-GCM-SHA256'
然后从同一台机器与 s_client 连接:
openssl s_client -connect localhost:8888 -state -cipher 'ECDHE-RSA-AES128-GCM-SHA256'
给我:
3077933256:error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available:s23_clnt.c:469:
但是 openssl ciphers 告诉我它是可用的,并且 key 也应该有效。
当我在 apache 2.4 的同一台机器上使用相同的 key 时,我的浏览器使用 ECDHE-RSA-AES128-GCM-SHA256。
所以我尝试用 chrome 浏览器访问 s_server:
https://machineip:8888
然后服务员说:
CIPHER is ECDHE-RSA-AES128-GCM-SHA256
所以 s_server 和 key 确实支持密码,但 s_client 不支持?
为什么?
更多的调查表明,只有使用 SHA-1 进行签名的密码似乎在客户端中有效......
PS:我遇到了这个问题,因为我的 node.js websocket 服务器似乎也仅限于 SHA-1 密码。
最佳答案
You might add the -tls1_2 option. I seem to recall the AES/GCM ciphers are TLS 1.1 or TLS 1.2. If its Ubuntu prior to 14, then forget it. Ubuntu disables TLS 1.2 in clients for interop reasons. See Ubuntu 12.04 LTS: OpenSSL downlevel version, does not support TLS 1.2. – jww Aug 13 at 12:42
jww是对的!
它与 s_client 中的 -tls1_2 选项一起使用,尽管我使用的是 Ubuntu 12.04 LTS。也许这就是为什么我必须明确给出这个选项。
关于encryption - openssl s_client 和 s_server 密码不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25286356/