OpenSSL3.0で作成したクライアント証明書のインポートで「パスワードが違います」
はじめに
Google Compute Engineで作成したVM(Ubuntu)にWebサーバを立てて,さらにアクセスできるユーザを制限できるようにSSLクライアント証明書を要求するようにした.
各種SSL証明書はUbuntuにデフォルトでインストールされていたOpenSSL3.0で作成し,いざ自分用のクライアント証明書をインポートしようとしたところ,絶っ対にパスワードはあっているのに何度試しても「パスワードが違います。」
そのときの対処方法のメモ.
もし同じく引っかかった人がいたときに楽ができれば...という思いでここに残しておきます.
環境
サーバ:
Ubuntu 22.04.1 LTS
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
クライアント:
macOS Big Sur / Android 12
原因
しっかりstackoverflowに回答があった.
OpenSSL3.0からpfxファイルをエクスポートする時の暗号化アルゴリズムがtrippleDESからAES256へ変更になっている.
これが古いOSだとサポートされていないため,正しいはずのパスワードを打ち込んでも複合化できない.
今回試したのはMacとAndroidだったが,stackoverflowによるとWindows10でも同事象になる模様.
対処
クライアント証明書のpfxファイル作成時に「-legacy」オプションを付ければ従来の暗号化アルゴリズムで暗号化してくれる.
$ openssl pkcs12 -export -in client.crt -inkey client.key -out myclientcert.pfx -name "ssl.test.com" -legacy
上記コマンドで作成したクライアント証明書を自端末でインポートしてみたところ,何の問題もなく成功するようになった.
当然ながらOpenSSL3.0で採用しているASE256の方がより強固なアルゴリズムだと思うので,クライアント証明書はサポート状況見ながらいずれ作り直した方がよいと思う.
参考
「パスワードが違います。」というメッセージに惑わされてなかなか答えに辿り着けなかったが,よく探せばOpenSSLのpfxの暗号化については解説している記事も多かった.
クライアント証明書作成関連