OpensslでEC(楕円曲線)のクライアント証明書を作成する
概要
Opensslでクライアント証明書を作成する方法はよく紹介されているが
ほとんどがRSA暗号を用いた物だったため、EC(楕円曲線)暗号を用いたクライアント証明書の作成方法を調べました。
おまけとしてnginxで利用する際の設定も紹介します
目次
CA証明書の生成
CAとは証明書を発行する機関の事です。
PKIはクライアントがCAを信頼しそのCAが発行した証明書を許可するという仕組みのため、オレオレ証明書でもCAの作成が必要です。
設定ファイルの記述
CA.txtというファイル名でファイルを作成し、以下の内容をコピペします。
これは参考文献(1)からそのまま持ってきました。
1 | subjectKeyIdentifier=hash |
証明書の生成
以下のコマンドを実行します。
1 | sudo openssl ecparam -name secp384r1 -genkey -noout -out CA.key |
これで以下の通りファイルが生成されます
| ファイル名 | 用途 |
|---|---|
| CA.key | CAの秘密鍵 |
| CA.csr | CAの証明書発行要求 |
| CA.crt | CAの証明書 |
クライアント証明書の発行
続いて、実際に使用するクライアント証明書を作成します。
設定ファイルの記述
Client.txtというファイル名でファイルを作成し、以下の内容をコピペします。
これは参考文献(1)からそのまま持ってきました。
1 | basicConstraints=CA:FALSE |
クライアント証明書の生成
以下のコマンドを実行します。
1 | sudo openssl ecparam -name secp384r1 -genkey -noout -out Client.key |
これで以下の通りファイルが生成されます
| ファイル名 | 用途 |
|---|---|
| Client.key | クライアントの秘密鍵 |
| Client.csr | クライアントの証明書発行要求 |
| Client.crt | クライアントの証明書 |
Nginxへの設定方法(おまけ)
ssl_certificateとかの設定が書いてある所に書いてください。
1 | ssl_client_certificate "<CA.crtのファイルパス>"; |
WindowsやAndroidに証明書をインポートする方法
PKCS12形式に変換します。
※ここで-legacyオプションをつけないとAndroidにインポートできない
1 | sudo openssl pkcs12 -export -legacy -in Client.crt -inkey Client.key -certfile CA.crt -out Client.pfx |
これでWindows/Androidで扱える形式になりました。Client.pfxをコピーして、利用してください。
Windowsの場合は、ダブルクリックするとウィザードが立ち上がるので指示に従ってインストールしてください。
主要なブラウザからはこれだけで使えるようになります。
Androidの場合は以下の通り設定画面を開く
設定 -> セキュリティ -> セキュリティの詳細設定 -> 暗号化と認証情報 -> 証明書のインストール -> VPNとアプリユーザー証明書
ファイルピッカーが表示されたらClient.pfxをタップして開く
パスワードの入力を求められたら、変換時に入力したパスワードを入力する。
Androidでオレオレクライアント証明書を扱えるブラウザは(自分が試した限りでは)Operaだけでした。
参考文献
OpensslでEC(楕円曲線)のクライアント証明書を作成する
https://lunatic.red/2024/03/22/OpensslでEC-楕円曲線-のクライアント証明書を作成する/