以下代码在Heroku-18堆栈上运行良好
p12_file = File.read(uploaded_p12_file_path)
pkcs12 = OpenSSL::PKCS12.new p12_file, password
但是,在升级到Heroku-22 Stack之后,相同的代码会引发以下错误:
PKCS12_parse: unsupported
用户可以通过网络上的输入表单上传带有密码的p12文件。
我们使用的是Ruby 3.1.2。奇怪的是,它在当地的开发机器上工作,而不是在Heroku上工作。有人有线索吗?任何帮助都是非常感谢的。
发布于 2022-09-30 12:37:45
我被同样的错误咬了一口。在PKCS12 3中对OpenSSL API进行了许多更新,其中包括对遗留算法的反对,这正是我们得到的结果。根据您的设置,如果您能够将您的证书转换为X509,您应该能够回到正轨上。第一件事是: p12证书在同一个文件中同时包含证书及其密钥。对于X509证书,它们需要是单独的文件。您可以使用以下命令导出它们:
# Export certificate
openssl pkcs12 -legacy -in my_certificate.p12 -clcerts -nokeys -out my_certificate.pem
# Export key
openssl pkcs12 -legacy -in my_certificate.p12 -clcerts -nocerts -out my_certificate.key
我在SSLContext
中使用它们,这是我添加私钥的地方:
OpenSSL::SSL::SSLContext.new.tap do |ctx|
ctx.add_certificate(
OpenSSL::X509::Certificate.new(File.read("my_certificate.pem")),
OpenSSL::PKey::RSA.new(File.read("my_certificate.key"), @cert_password),
[@root_cert]
)
end
我希望你能在你的应用程序中使用相同的概念。
https://stackoverflow.com/questions/73894224
复制相似问题