Rails OpenSSL - PKCS12_parse: サポートされていません (OpenSSL::PKCS12::PKCS12Error)
概要
HTTParty を使用して、p12 ファイルとパスワードを使用してホストに接続しています。 gem は内部的に OpenSSL::PKCS12.new(p12_file_content, ‘password’) を使用するので、それをテストするために、rails コンソールでこれを実行しました。
p12_file_content = File.read("#{Rails.root}/config/certs/#{Rails.env}_client_certificate.p12")
=> "0\x82\e\xF1\u0002" .......
OpenSSL::PKCS12.new(p12_file_content, 'myfakepassword')
エラー:
`initialize': PKCS12_parse: unsupported (OpenSSL::PKCS12::PKCS12Error)
次に、端末でファイルを読み取ろうとしました。
openssl pkcs12 -info -in development_client_certificate.p12 -nodes
Enter Import Password:
そして、これは機能します。 OpenSSL Ruby がこの証明書で苦労するのはなぜですか?
(追記: OpenSSL::PKCS12.new で動作する他の証明書があり、正しいパスワードを 100 回試しました)
バージョン:
irb(main):016:0> OpenSSL::VERSION
=> "3.0.1"
そして
ruby -v
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [arm64-darwin22]
openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
これらが重要かどうかわかりませんが? gem の 3.0.1 は Ruby 3.1.4 に使用されます
解決策
修正: dbugger のコメントは正しかったです。リンクされている他の投稿には、証明書が従来の形式を使用していると記載されていました。これは私の場合でもあったことがわかりました。
p12 証明書を新しい形式に変換してみました。
.pem ファイルと .key ファイルはすでに存在していたので、最初にそれらを抽出する必要はありませんでした。
新しい形式に変換するためだけに、このコマンドを使用しました(インターネット上の他の場所にあります)
openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in development_certificate.pem -out my_new_cert.p12 -inkey development_client_certificate.key
正直に言うと、PBE-SHA1-3DES アルゴリズムが何なのか、あるいは他のアルゴリズムが機能するかどうかはわかりませんが、これは機能します:)
新しい証明書は Ruby の OpenSSL gem でうまく機能するようになりました :)