OpensslでEC(楕円曲線)のクライアント証明書を作成する

概要

Opensslでクライアント証明書を作成する方法はよく紹介されているが
ほとんどがRSA暗号を用いた物だったため、EC(楕円曲線)暗号を用いたクライアント証明書の作成方法を調べました。

おまけとしてnginxで利用する際の設定も紹介します


目次


CA証明書の生成

CAとは証明書を発行する機関の事です。
PKIはクライアントがCAを信頼しそのCAが発行した証明書を許可するという仕組みのため、オレオレ証明書でもCAの作成が必要です。

設定ファイルの記述

CA.txtというファイル名でファイルを作成し、以下の内容をコピペします。
これは参考文献(1)からそのまま持ってきました。

1
2
3
4
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints=CA:TRUE
keyUsage=keyCertSign,cRLSign

証明書の生成

以下のコマンドを実行します。

1
2
3
$ sudo openssl ecparam -name secp384r1 -genkey -noout -out CA.key
$ sudo openssl req -new -key CA.key -out CA.csr -subj "/CN=Selfsign Root CA"
$ sudo openssl x509 -req -days 3650 -in CA.csr -signkey CA.key -extfile CA.txt -out CA.crt

これで以下の通りファイルが生成されます

ファイル名 用途
CA.key CAの秘密鍵
CA.csr CAの証明書発行要求
CA.crt CAの証明書

クライアント証明書の発行

続いて、実際に使用するクライアント証明書を作成します。

設定ファイルの記述

Client.txtというファイル名でファイルを作成し、以下の内容をコピペします。
これは参考文献(1)からそのまま持ってきました。

1
2
3
4
5
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
extendedKeyUsage=clientAuth
keyUsage=digitalSignature

クライアント証明書の生成

以下のコマンドを実行します。

1
2
3
$ sudo openssl ecparam -name secp384r1 -genkey -noout -out Client.key
$ sudo openssl req -new -key Client.key -out Client.csr -subj "/CN=Client"
$ sudo openssl x509 -req -in Client.csr -CA CA.crt -CAkey CA.key -CAcreateserial -days 3650 -extfile Client.txt -out Client.crt

これで以下の通りファイルが生成されます

ファイル名 用途
Client.key クライアントの秘密鍵
Client.csr クライアントの証明書発行要求
Client.crt クライアントの証明書

Nginxへの設定方法(おまけ)

ssl_certificateとかの設定が書いてある所に書いてください。

1
2
ssl_client_certificate "<CA.crtのファイルパス>";
ssl_verify_client on;

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だけでした。

参考文献

(1) 自己署名CAをOpenSSLコマンドラインオプションで使う #OpenSSL - Qiita

OpensslでEC(楕円曲線)のクライアント証明書を作成する

https://lunatic.red/2024/03/22/OpensslでEC-楕円曲線-のクライアント証明書を作成する/

Author

fuchse-ohren

Posted on

2024-03-22

Updated on

2026-03-11

Licensed under

コメント