イントラなどで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の時点でそういう仕様。
関係がないドメインも含めてセットするって、誰が始めたの?
署名する
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通信できる。