それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

openssl コマンドで証明書・秘密鍵・証明書リクエストのペアの一致を調べる。

openssl コマンドで秘密鍵・証明書の公開鍵一致を調べる

秘密鍵と証明書(公開鍵)のペアの枚数が増えてきて、どれが有効な秘密鍵かわからなくなった。

SSL証明書・署名リクエスト・秘密鍵から、modulusを取り出し、ハッシュ値の一致を調べれば、keyとCertの一致を調べられる。

Modulus とは、秘密鍵と公開鍵の積です。

公開鍵と秘密鍵の積(詳しくはRSA暗号を知る)

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