Techioz Blog

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 でうまく機能するようになりました :)