简体   繁体   English

Ruby Webrick 服务器无法验证客户端证书

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

I am running a sinatra based web application using Webrick.我正在使用 Webrick 运行基于 sinatra 的 Web 应用程序。 I was able to setup TLS using my self-signed server certificates and webrick starts in TLS mode, but I am not able to make a connection to server using client certificate (cert based authentication).我能够使用我的自签名服务器证书设置 TLS,并且 webrick 以 TLS 模式启动,但我无法使用客户端证书(基于证书的身份验证)连接到服务器。

Server logs says " ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=error: certificate verify failed "服务器日志显示“错误 OpenSSL::SSL::SSLError:SSL_accept 返回=1 errno=0 状态=错误:证书验证失败

But the same certificates (both server and client) are working with apache server.但是相同的证书(服务器和客户端)正在使用 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

This issue was fixed by providing the cacert file as :SSLCACertificateFile in server options instead of :SSLClientCA .此问题已通过在服务器选项中提供 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.

相关问题 红宝石SSLv3上的SSL客户端身份验证Web服务读取服务器证书B:证书验证失败 - SSL Client Authenticated Webservice on ruby SSLv3 read server certificate B: certificate verify failed 使用Ruby中的SSLServer验证客户端证书 - Verify client certificate using SSLServer in Ruby Ruby验证安全ldap服务器的证书 - Ruby verify the certificate of secure ldap server Ruby SSL错误,读取服务器“证书B:证书验证失败” - Ruby SSL Error, read server “certificate B: certificate verify failed” Ruby Smartsheet证书验证失败 - Ruby Smartsheet certificate verify failed Ruby Imap OpenSSL::SSL::SSLError:读取服务器证书 B:证书验证失败 - Ruby Imap OpenSSL::SSL::SSLError: read server certificate B: certificate verify failed Ruby rails 回形针 Seahorse::Client::NetworkingError(SSL_connect 返回=1 errno=0 状态=错误:证书验证失败) - Ruby rails paperclip Seahorse::Client::NetworkingError (SSL_connect returned=1 errno=0 state=error: certificate verify failed) Ruby Rails WEBrick服务器退出,出现我不明白的错误 - Ruby rails WEBrick server exiting with errors I don't understand 如何从Ruby脚本在Rubymine控制台中启动WEBrick服务器 - How to Start WEBrick Server in Rubymine Console from Ruby Script 如何在安全 SSL 模式 HTTPS 中启动 WEBrick Ruby 服务器 - How to start WEBrick Ruby server in secure SSL mode HTTPS
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM