簡體   English   中英

Ruby Webrick 服務器無法驗證客戶端證書

[英]Ruby Webrick server not able to verify client certificate

我正在使用 Webrick 運行基於 sinatra 的 Web 應用程序。 我能夠使用我的自簽名服務器證書設置 TLS,並且 webrick 以 TLS 模式啟動,但我無法使用客戶端證書(基於證書的身份驗證)連接到服務器。

服務器日志顯示“錯誤 OpenSSL::SSL::SSLError:SSL_accept 返回=1 errno=0 狀態=錯誤:證書驗證失敗

但是相同的證書(服務器和客戶端)正在使用 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

此問題已通過在服務器選項中提供 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'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM