更新:我的许多问题都与不知道如何发布客户端证书有关。我已经放置了details over here。
我使用Ruby连接到仅支持 TLS_RSA_WITH_AES_256_CBC_SHA256
密码的SSL服务器。我还需要提供客户证书。
当我查看来自OpenSSL::Cipher.ciphers
的可用密码时, TLS_RSA_WITH_AES_256_CBC_SHA256
未列为选项。
如何将此密码添加到可用的密码?
谢谢!
这是我的代码:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new(File.read("my.cer"))
http.ca_file = 'their_root.cer'
http.ciphers = ['AES256-SHA256']
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ssl_version = :SSLv23
request = Net::HTTP::Post.new(uri.request_uri)
request.body = my_xml
response = http.request(request)
我收到的错误:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert handshake failure
检查数据包显示服务器终止时显示消息"握手失败(40)"这似乎是一个密码问题。
我没有从命令行连接,但这是openssl s_client的结果:
$ openssl s_client -connect dir-staging.surescripts.net:443 -tls1 -servername dir-staging.surescripts.net
CONNECTED(00000003)
depth=2 /C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
14089:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40
14089:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566:
答案 0 :(得分:1)
根据openssl,这也称为“AES256-SHA256”。根据{{3}},AES256-SHA256被认为是不安全的,因此被禁用。该链接包含一个“补丁”以重新启用不安全的密码。
您可能希望向安全专业人员咨询有关您组织所涉及的风险的建议。
(编辑)错误“证书链中的自签名证书”必须为Ruby lang。
答案 1 :(得分:0)
当我查看
OpenSSL::Cipher.ciphers
中的可用密码时,TLS_RSA_WITH_AES_256_CBC_SHA256
未列为选项。
以下OpenSSL命令将为您列出相关密码:
$ openssl ciphers -v 'ALL:!RC4:!MD5:!aNULL' | grep AES256 | grep SHA256`.
结果是:
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256
DH-RSA-AES256-SHA256 TLSv1.2 Kx=DH/RSA Au=DH Enc=AES(256) Mac=SHA256
DH-DSS-AES256-SHA256 TLSv1.2 Kx=DH/DSS Au=DH Enc=AES(256) Mac=SHA256
AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
根据Is it possible to enable TLS v1.2 in Ruby? If so, how?,您接下来应尝试更改以下内容:
http.ssl_version = :SSLv23
要:
ctx = OpenSSL::SSL::SSLContext.new
ctx.ssl_version = :TLSv1_2
如何将此密码添加到可用的密码?
根据您的问题的编辑:
$ openssl s_client -connect dir-staging.surescripts.net:443 -tls1 -servername dir-staging.surescripts.net
14089:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40
14089:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566:
OpenSSL 0.9.8 不支持TLS 1.2。您应该转到OpenSSL 1.0.0或更高版本。 OpenSSL 1.0.2是最新版本,我们鼓励您使用它。