SSLサーバ証明書と秘密鍵が対になっているかどうかチェック

SSLサーバ証明書と秘密鍵が対になっているかどうかチェック

ApacheSSLサーバ証明書と秘密鍵が対になっているかどうかチェック

ssl.conf の反映時に Apache がうまく起動しない問題が発生したので、久しぶりに Apache の設定を見てみました。

ssl.conf の内容の中で、証明書のファイルパスを定義する際、apache2.2 と apache2.4 で違いがあるものの(サーバ証明書と中間 CA 証明書、クロスルート証明書を同じファイルに定義する)、設定ファイルの内容自体には問題が見受けられなかったので、証明書の確認をしてみることにしました。

設定が正しくても、発行された証明書や、CSR を作成する際に使用した秘密鍵の内容が間違っていたら意味がないですからね。

コマンドラインでチェック

サーバ証明書と秘密鍵のチェックは openssl コマンドでできるので、下記のサイトを参考にチェックしてみます。まさかとは思ったのですが、結果的には証明書と秘密鍵がアンマッチしたことで、原因が証明書または秘密鍵にあることがわかりました。

せっかくなので、コマンドラインをまとめてシェルにしてみました。/tmp 以下に一時ファイルを作成するバージョンと、無駄なファイルは作成しないバージョンの 2 パターンを書き残しておきます。

使用方法は、コマンドに続けて、秘密鍵と証明書のファイルパスを引数として渡します。

$ check_crtkey.sh /hoge/ssl.key /hoge/ssl.crt
#/bin/sh

DIFF="diff -u"

if [ "$1" = "" ]; then
  echo "please input key file path.";
  exit 1;
fi

if [ "$2" = "" ]; then
  echo "please input crt file path.";
  exit 1;
fi

KEY=$1
CRT=$2

openssl rsa -noout -modulus -in ${KEY} > /tmp/check_key
openssl x509 -noout -modulus -in ${CRT} > /tmp/check_crt

${DIFF} /tmp/check_key /tmp/check_crt

exit 0;
#/bin/sh

if [ "$1" = "" ]; then
  echo "please input key file path.";
  exit 1;
fi

if [ "$2" = "" ]; then
  echo "please input crt file path.";
  exit 1;
fi

KEY=$1
CRT=$2

KEY_MODULUS=`openssl rsa -noout -modulus -in ${KEY}`
CRT_MODULUS=`openssl x509 -noout -modulus -in ${CRT}`

if [ "${KEY_MODULUS}" != "${CRT_MODULUS}" ]; then
  echo "miss match."
  echo "[key]"
  echo ${KEY_MODULUS}
  echo ""
  echo "[crt]"
  echo ${CRT_MODULUS}
fi

exit 0;

参考

Apacheで再起動不可

最終更新日:

関連記事

人気記事

新着情報