主机名与服务器证书不匹配-使用旧的过期证书

问题描述

我正在尝试通过TCP套接字连接到旧的,未维护的游戏服务器。当我尝试使用OpenSSL和Socketry这样做时,出现以下错误。

主机名“ xxx”与服务器证书不匹配

这就是我的代码的工作方式。

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返回= 1 errno = 0状态=错误:dh密钥太小(OpenSSL :: SSL :: SSLError)

如何绕过这些错误并仅强制连接到所述服务器?证书本身已在10年前过期。

解决方法

Socketry并没有包含太多与此相关的文档,因此您需要参考源代码。根据您要尝试执行的操作,可以尝试以下操作之一:

  1. verify_hostname: false传递到Socket#connect
  2. 自己营救Socketry::SSL::HostnameError
  3. 营救Socketry::SSL::CertificateVerifyError

其中至少有一个应该解决您的特定问题。如果不是这样,则该来源会提供您可能会猴子打补丁或针对用例进行优化的其他地方。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...