我用:
启动服务器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密码告诉我它可用,密钥也应该有效。 当我在apache 2.4的同一台机器上使用相同的密钥时,我的浏览器使用ECDHE-RSA-AES128-GCM-SHA256。 所以我尝试使用chrome浏览器访问s_server:
https://machineip:8888
服务员说:
CIPHER is ECDHE-RSA-AES128-GCM-SHA256
所以s_server和密钥确实支持密码,但是s_client不支持? 为什么呢?
更多调查显示,只有使用SHA-1签名的密码才能在客户端中运行...
PS:我遇到过这个问题,因为我的node.js websocket服务器似乎也只限于SHA-1密码。
答案 0 :(得分:1)
您可以添加-tls1_2选项。我似乎记得AES / GCM密码是TLS 1.1或TLS 1.2。如果它的Ubuntu在14之前,那么就算了吧。由于互操作原因,Ubuntu在客户端禁用TLS 1.2。请参阅Ubuntu 12.04 LTS:OpenSSL下层版本,不支持TLS 1.2。 - jww 8月13日12:42
jww是对的!
它使用了s_client中的-tls1_2选项,尽管我使用的是Ubuntu 12.04 LTS。也许这就是我必须明确给出这个选项的原因。