主机名与服务器证书不匹配 - 使用旧的过期证书
Hostname does not match the server certificate - using old expired certificate
我正在尝试通过 TCP 套接字连接到一个旧的、未维护的游戏服务器。当我尝试使用 OpenSSL 和 Socketry 这样做时,出现以下错误。
hostname "xxx" does not match the server certificate
我的代码是这样工作的。
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
ssl_context.ciphers = "AES128-SHA"
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("certificate.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("certificate.key"))
socket = Socketry::SSL::Socket.new(ssl_context: ssl_context)
socket.connect(address, port)
我不得不将密码强制为 AES128-SHA,否则我会得到不同的错误。
SSL_connect returned=1 errno=0 state=error: dh key too small (OpenSSL::SSL::SSLError)
如何绕过这些错误并强制连接到所述服务器?证书本身已在 10 年前过期。
Socketry 没有包含太多关于此的文档,因此您需要求助于源代码。根据您要执行的操作,您可以尝试以下操作之一:
- 将
verify_hostname: false
传递给 Socket#connect。
- 自救 Socketry::SSL::HostnameError。
- 营救 Socketry::SSL::CertificateVerifyError。
至少其中一项应该可以解决您的具体问题。如果没有,来源提供了您可能 monkey-patch 或针对您的用例进行优化的其他地方。
我正在尝试通过 TCP 套接字连接到一个旧的、未维护的游戏服务器。当我尝试使用 OpenSSL 和 Socketry 这样做时,出现以下错误。
hostname "xxx" does not match the server certificate
我的代码是这样工作的。
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
ssl_context.ciphers = "AES128-SHA"
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("certificate.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("certificate.key"))
socket = Socketry::SSL::Socket.new(ssl_context: ssl_context)
socket.connect(address, port)
我不得不将密码强制为 AES128-SHA,否则我会得到不同的错误。
SSL_connect returned=1 errno=0 state=error: dh key too small (OpenSSL::SSL::SSLError)
如何绕过这些错误并强制连接到所述服务器?证书本身已在 10 年前过期。
Socketry 没有包含太多关于此的文档,因此您需要求助于源代码。根据您要执行的操作,您可以尝试以下操作之一:
- 将
verify_hostname: false
传递给 Socket#connect。 - 自救 Socketry::SSL::HostnameError。
- 营救 Socketry::SSL::CertificateVerifyError。
至少其中一项应该可以解决您的具体问题。如果没有,来源提供了您可能 monkey-patch 或针对您的用例进行优化的其他地方。