【问题标题】:OpenSSL::SSL::SSLServer doesn't add peer_certOpenSSL::SSL::SSLServer 不添加 peer_cert
【发布时间】:2021-06-17 11:33:58
【问题描述】:

我的服务器工作看起来有点像这样


require "socket"
require "openssl"
require "thread"

listeningPort = Integer(ARGV[0])

server = TCPServer.new(listeningPort)
sslContext = OpenSSL::SSL::SSLContext.new
sslContext.cert = OpenSSL::X509::Certificate.new(File.open("cert.pem"))
sslContext.key = OpenSSL::PKey::RSA.new(File.open("priv.pem"))
sslServer = OpenSSL::SSL::SSLServer.new(server, sslContext)

puts "Listening on port #{listeningPort}"

loop do
  connection = sslServer.accept
  Thread.new {...}
end

当我使用 TLS1.3 连接并提供客户端证书时,当我在 ssl 上下文中验证证书时,我可以看到它正在工作,但从未在连接上设置 peer_cert,只有上下文接收会话.

是否需要手动升级到 TLS 才能从客户端访问证书?

我想要它的原因是,我可以通过查看 Gemini 协议上的证书来限制内容或进行身份验证

【问题讨论】:

    标签: ruby server openssl tls1.3


    【解决方案1】:

    经过大量阅读 OpenSSL 文档后,我找到了解决方案:

    我设置sslContext.verify_mode = OpenSSL::SSL::VERIFY_PEER并添加验证回调

    sslContext.verify_callback = proc do |_a, _b|
      true
    end
    

    其行为类似于 VERIFY_NONE,但它确实请求对等证书(当模式设置为 VERIFY_NONE 时它不会,如文档所述:https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_verify.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      相关资源
      最近更新 更多