openssl コマンドで秘密鍵・証明書の公開鍵一致を調べる
秘密鍵と証明書(公開鍵)のペアの枚数が増えてきて、どれが有効な秘密鍵かわからなくなった。
SSL証明書・署名リクエスト・秘密鍵から、modulusを取り出し、ハッシュ値の一致を調べれば、keyとCertの一致を調べられる。
Modulus とは、秘密鍵と公開鍵の積です。
bashスクリプトで RSA 鍵と x509証明書が正しいペアになっているかチェックする
CERT=../certs/example.com/fullchain.pem PKEY=../certs/example.com/privkey.pem if [[ `openssl x509 -noout -modulus -in $CERT | md5sum` == `openssl rsa -noout -modulus -in $PKEY |md5sum` ]] ;then echo OK else echo NG fi
もう少しコピペしやすく
CERT=../certs/example.com/fullchain.pem PKEY=../certs/example.com/privkey.pem [[ `openssl x509 -noout -modulus -in $CERT | md5sum` \ == `openssl rsa -noout -modulus -in $PKEY |md5sum` ]] \ && echo OK. its pair. || echo not pair
2つのコマンドで、modulusを知り、md5sum を求めて、その一致を見ている。
秘密鍵からmd5を計算
openssl rsa -noout -modulus -in secret.key | md5sum
証明書から取り出しmd5を計算
証明書には、公開鍵と所有者情報とCAの署名が含まれる。そこから計算します。
openssl x509 -noout -modulus -in my-cert.pem | md5sum
署名リクエストから取り出し md5を計算
署名リクエストは、公開鍵と所有者情報とダイジェストが含まれるので、そこから計算します。
openssl req -noout -modulus -in req.pem | md5sum
ハッシュ値を比較すれば、わかる。
ハッシュ値の一致をみれば、同一の秘密鍵と公開鍵のペアで作成された証明書であるとわかる。
openssl x509 -noout -modulus -in unknown.pem | md5sum openssl rsa -noout -modulus -in secret.key | md5sum
証明書の鍵ファイルがわからなくなったとか、多すぎて分かりづらいときに、チェックすることができ、ファイル名に惑わされず確信が持てる。
md5sum コマンドがない場合
md5sum
コマンドの代わりに openssl md5
でもいい。
openssl が何度も登場して読みづらくなるので、本文中ではmd5sumに統一してある。
フォルダ内の鍵ファイルのmd5をサクッと求める例
鍵ファイルが増えてくると管理が大変なので、鍵ファイルのmodulus のmd5を事前に求めておくと、チェックがしやすい。
for i in $(find -type f -name '*key*' ) ; do printf "%-60s %s\n" $i $(openssl rsa -noout -modulus -in $i | md5sum | cut -d ' ' -f 1 ); done