SSL証明書の各種確認コマンド

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

よく訓練されたアップル信者、都元です。

実は個人的に、最近までSSLサーバ証明書というものにロクに触れたことがなかったのですが、先日CloudFrontがSSLに対応したのをうけて、本格的に触ってみました。

ご存知の通り、SSL証明書は暗号や電子署名等の技術を利用した仕組みです。その昔、PDFの暗号化処理を実装したことがあるんですが、暗号処理関連の動作確認というのは非常に厄介なものです。暗号文を複号化するにあたって、自分が設定したパスワードで復号できない、ということは暗号化処理または復号化処理に間違いがあることになるわけですが、どこがどのように間違っているのか、追い掛けるのは事実上不可能です。(むしろ、分かったら暗号としてヤバいですね)

さて、SSLサーバ証明書では、主に「秘密鍵(PEM)」「証明書署名要求(CSR)」「証明書(CER)」という3つのファイルを扱います。PEMを作成した後、CSRを作成し、それを認証局に送るとCERを返してくれます。

PEMとCSRの作成

$ openssl genrsa -rand /dev/random -out 秘密鍵.pem 2048
$ openssl req -new -key 秘密鍵.pem -out 証明書署名要求.csr

CSRを認証局に提出することにより、証明書.cerが手に入ります。

証明書と秘密鍵の一致チェック

1つのCERには、1つのCSRと1つのPEMが対応付きます。これらの対応関係ですが、同時に複数の証明書を扱ったりすると、どのPEMがどのCERに対応するのか、分からなくなってしまうことがあります。いや、ありましたorz その場合、opensslコマンドを使って各ファイルのmodulusという値を比較すれば良いです。

$ openssl req -noout -modulus -in 証明書署名要求.csr
$ openssl rsa -noout -modulus -in 秘密鍵.pem
$ openssl x509 -noout -modulus -in 証明書.cer

以上のコマンドで、各ファイルのmodulusを表示できますので、これらが一致していることでセットを確認できます。

証明書の中身の詳細を見たい

$ openssl req -noout -text -in 証明書署名要求.csr
$ openssl rsa -noout -text -in 秘密鍵.pem
$ openssl x509 -noout -text -in 証明書.cer

modulus以外の詳細を確認したい場合も、上記コマンドでいけます。

秘密鍵のパスフレーズを解く

秘密鍵にパスフレーズがついている場合、Apache等に設定すると、起動の度にパスフレーズを要求されてしまいます。自動化の妨げになってしまうので、(セキュリティレベルが低下するのは承知の上で)パスフレーズを外したいことがあります。その場合は以下のコマンド。

$ openssl rsa -in (パスフレーズ付き秘密鍵) -out (パスフレーズ無し秘密鍵の出力先)

まとめ

という、オレオレ備忘録でした。