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'
}
我是 运行 使用 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'
}