ruby-on-rails - PKCS12.new file.p12, passphrase -> 将我们的 Rails 应用程序升级到 Heroku-22 Stack 后抛出 "PKCS12_parse: unsupported"错误

标签 ruby-on-rails heroku openssl

以下代码在 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 上运行。有人有线索吗?感谢您的帮助。

最佳答案

我刚遇到同样的错误。 OpenSSL 3 中对 PKCS12 API 进行了许多更新,其中弃用了 legacy algorithms。这就是我们的原因。根据您的设置,如果您能够将证书转换为 X509,您应该能够回到正轨。首先是:p12 证书在同一个文件中包含证书及其 key 。对于 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

我希望您可以在您的应用中使用相同的概念。

关于ruby-on-rails - PKCS12.new file.p12, passphrase -> 将我们的 Rails 应用程序升级到 Heroku-22 Stack 后抛出 "PKCS12_parse: unsupported"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73894224/

相关文章:

node.js - 每当出现catch错误或控制台错误并且服务器在localhost或生产端(heroku)停止时,如何在UI上显示错误警报?

Docker TLS - 如何在本地机器上创建 key

ubuntu - 通过 Elastic Load Balancer 将 SSL 证书添加到 EC2 实例

ruby-on-rails - 使用常量化的安全影响

ruby-on-rails - Rails 如何使 form_for 输入文本区域更宽?

postgresql - Heroku 数据库恢复失败,提示有多个应用程序,但应用程序包含在恢复命令中

heroku - Heroku 上的文档拆分

objective-c - 为 Web 浏览器到 native 应用程序切换设置 apple-app-site-association (iOS 8)

javascript - Uncaught ReferenceError : RailsAdmin is not defined

ruby-on-rails - Rails - Omniauth-facebook App_id 需要错误