如何使用网络定制的OpenSSL引擎:: HTTP(How to use a custom Open

2019-10-24 01:39发布

我试图使用客户端证书身份验证所需的加密操作的自定义OpenSSL的引擎。

目前的Net :: HTTP让我们通过只将被用于客户端身份验证证书和密钥。 我们正在将所有私钥HSM(“硬件安全模块”),这样,而不是默认的OpenSSL引擎,我们希望插件自定义OpenSSL的引擎。 自定义OpenSSL的引擎将使用HSM执行私钥签名操作。

目前使用默认的引擎,我们有一些代码是这样的:

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
http.cert = OpenSSL::X509::Certificate.new(File.read("/tmp/cert.pem"))
http.key = OpenSSL::PKey::RSA.new(File.read('/tmp/key_pointer.pem'))
http.ssl_version = :TLSv1_2
http.open_timeout = open_timeout
http.read_timeout = read_timeout
request = Net::HTTP::Post.new(uri)
request.body = "body goes here"
response = http.request(request)

我试图寻找如何插件的净:: HTTP定制OpenSSL的引擎,但找不到任何东西。 我们如何使用使用私钥作为客户端证书验证的一部分签署的自定义引擎?

Answer 1:

我周围的工作这一点。 由于网:: HTTP客户端证书身份验证过程中使用OpenSSL加密。 而不是传递关键的,我通过定制引擎使用的钥匙手柄和操作客户端证书身份验证过程中进行的(签约)上被转发到HSM。 下面是代码是如何样的样子:

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
http.cert = OpenSSL::X509::Certificate.new(File.read("/tmp/cert.pem"))
OpenSSL::Engine.load
http.key =  OpenSSL::Engine.by_id("EngineId").load_private_key("CKA_LABEL=rsa-private-client-cert-auth-test-9ik98jui98")
http.ssl_version = :TLSv1_2
http.open_timeout = open_timeout
http.read_timeout = read_timeout
request = Net::HTTP::Post.new(uri)
request.body = "body goes here"
response = http.request(request)


文章来源: How to use a custom OpenSSL engine for Net::HTTP