Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Webrick服务器无法验证客户端证书_Ruby_Https_Sinatra_Webrick - Fatal编程技术网

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

Ruby Webrick服务器无法验证客户端证书,ruby,https,sinatra,webrick,Ruby,Https,Sinatra,Webrick,我正在使用Webrick运行一个基于sinatra的web应用程序。我能够使用自签名服务器证书设置TLS,webrick在TLS模式下启动,但我无法使用客户端证书(基于证书的身份验证)连接到服务器 服务器日志显示“错误OpenSSL::SSL::SSLError:SSL\u accept returned=1 errno=0 state=ERROR:certificate verify failed” 但是相同的证书(服务器和客户端)在apache服务器上工作 def self.run!

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

服务器日志显示“错误OpenSSL::SSL::SSLError:SSL\u 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

通过在服务器选项中提供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'
}

同样的问题。你知道问题出在哪里吗?@rainkinz,是的,这已经解决了,看看答案