[OpenSSL]IPベースの自己署名証明書作成


イントラなどでHTTPS通信したい場合に、ローカルな認証局(CA)でローカルな証明書を発行する必要がある。
ネームベースの場合はCommon Name (CN)に定義すれば良いが、IPベースの場合は署名の方法が異なる。

CNは未定義、subjectAltNameにIPを定義すれば良い。

それを踏まえて、一連の流れは次の通り。

秘密鍵を用意する

署名する際に鍵が必要になるので、そちらを生成しておく。
当然、2048bit。

openssl genrsa -out 10.0.0.1.key 2048

証明書署名要求(CSR)を用意する

openssl req -new -key 10.0.0.1.key -out 10.0.0.1.csr -subj "/C=JP"

上記の例では国名だけセットしている。

SANの設定ファイルを用意する

echo "subjectAltName=IP:10.0.0.1" > ext.conf

IPだけ定義すれば良い。
DNSにexample.comをセットで定義している例を見かけるが、DNSの定義は不要。

軽くググってみたら、RHEL6の時点でそういう仕様。
関係がないドメインも含めてセットするって、誰が始めたの?

13.2.19. ドメインオプション: 証明書のサブジェクト名での IP アドレスの使用(LDAP のみ) Red Hat Enterprise Linux 6 | Red Hat Customer Portal

署名する

openssl x509 -req -in 10.0.0.1.csr -signkey 10.0.0.1.key -out 10.0.0.1.crt -extfile ext.conf -days 3650

署名済みの証明書を利用するクライアントPCにインストールすればHTTPS通信できる。