【问题标题】:Ruby Webrick server not able to verify client certificateRuby Webrick 服务器无法验证客户端证书
【发布时间】:2019-01-02 16:08:10
【问题描述】:

我正在使用 Webrick 运行基于 sinatra 的 Web 应用程序。我能够使用我的自签名服务器证书设置 TLS,并且 webrick 以 TLS 模式启动,但我无法使用客户端证书(基于证书的身份验证)建立与服务器的连接。

服务器日志显示“ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=error: certificate verify failed

但是相同的证书(服务器和客户端)正在使用 apache 服务器。

def self.run!
    server_options = {
      :Host => '0.0.0.0',
      :Port => 33443,
      :SSLEnable => true,
      :SSLVerifyClient    => OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT | OpenSSL::SSL::VERIFY_PEER,
      :SSLVerifyDepth => 3,
      :SSLCertificate => OpenSSL::X509::Certificate.new(File.open('/Users/cert.pem').read),
      :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open('/Users/key.pem').read),
      :SSLClientCA => OpenSSL::X509::Certificate.new(File.open('/Users/cai.cer').read)
  }

  Rack::Handler::WEBrick.run self, server_options do |server|
    [:INT, :TERM].each { |sig| trap(sig) { server.stop } }
    server.threaded = settings.threaded if server.respond_to? :threaded=
    set :running, true
  end
end

【问题讨论】:

  • 这里有同样的问题。你有没有弄清楚问题是什么?
  • @rainkinz,是的,这已解决,看看答案

标签: ruby https sinatra webrick


【解决方案1】:

已通过在服务器选项中将 cacert 文件提供为 :SSLCACertificateFile 而不是 :SSLClientCA 来解决此问题。

server_options = {
    :Host => '0.0.0.0',
    :Port => 443,
    :SSLEnable => true,
    :SSLVerifyClient    => OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT | OpenSSL::SSL::VERIFY_PEER,
    :SSLVerifyDepth => 4,
    :SSLCertificate => OpenSSL::X509::Certificate.new(File.open('/Users/cert.pem').read),
    :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open('/Users/key.pem').read),
    :SSLCACertificateFile => '/Users/cai.cer'
}

【讨论】:

    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 2014-06-29
    • 2014-09-05
    • 2013-01-23
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多