PKCS12.new 文件.p12,密码短语->抛出“PKCS12_parse:在将我们的Rails应用升级到Heroku-22 Stack之后,出现“unsupported”(不支持)错误

epggiuax  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(289)

下面的代码在Heroku-18堆栈上运行良好

p12_file = File.read(uploaded_p12_file_path)
pkcs12 = OpenSSL::PKCS12.new p12_file, password

但在升级到Heroku-22 Stack之后,相同的代码会引发以下错误:

PKCS12_parse: unsupported

用户可以通过Web上的输入表单上传其p12文件及其密码。
我们正在使用Ruby 3.1.2。奇怪的是,它可以在本地开发机器上工作,但不能在Heroku上工作。有人知道吗?任何帮助都是感激不尽的。

t98cgbkg

t98cgbkg1#

我也遇到了同样的错误。OpenSSL 3中有很多对PKCS12 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

我希望你能在你的应用程序中使用同样的概念。

相关问题