opensslコマンドでCSRや証明書の内容を表示し、鍵との対応を確認する方法
生成したCSRをSSL認証局へ送る前に中身をチェックしたり、証明書をサーバにインストールする前に鍵との対応を確認したりするためのTips
## CSRの内容を表示する
コピー&ペーストが可能なターミナルにて、
```shell
openssl req -text -noout
```
とコマンド入力して標準入力からの入力待ちの状態にしたうえで
```-----BEGIN CERTIFICATE REQUEST-----``` から ```-----END CERTIFICATE REQUEST-----``` までの内容をペーストする。(終了の境界はOpenSSLが自動で認識するのでEOFを送る必要はない)
## 証明書の内容を表示する
```shell
openssl x509 -text -noout
```
とコマンド入力して標準入力からの入力待ちの状態にしたうえで
```-----BEGIN CERTIFICATE-----``` から ```-----END CERTIFICATE-----``` までの内容をペーストする。
## 秘密鍵とCSR/証明書の対応をチェックする
SSL証明書の発行を要求するCSRは先だって作成した鍵ファイルを用いて生成されたものでなければいけないし、CSRに従い発行された証明書もCSRを生成した際に使用された鍵と対応してなければならない。SSL証明書回りの作業をいくつもやっていると、うっかり
すれば鍵の取り違えという事故が発生するかもしれない。
CSRや証明書が正しい鍵と対応づいているか確認するには、それぞれの Modulus セクションが同一かをチェックすればよい。
```shell
openssl rsa -text -noout -in 鍵ファイル名
```
として
```-----BEGIN RSA PRIVATE KEY-----``` ```-----END RSA PRIVATE KEY-----``` で囲まれた内容を持つファイルを与える。鍵ファイルをターミナルから標準入力へペーストする場合は -in 以降を省略する(普通の運用ではあまりそういう風にならないはずだが)
```text
Private-Key: (2048 bit)
modulus:
```
というセクションに表示される16進数の羅列に注目する。先に述べた、CSRや証明書の内容を表示した中に、それぞれ
```text
RSA Public Key: (2048 bit)
Modulus (2048 bit):
```
```text
Public-Key: (2048 bit)
Modulus:
```
というセクションがあるはずなので、内容が同じかどうか比較することで鍵とCSRや証明書の対応が合っていることを確認できる。完全に一致するか確認する必要はなく、適当な数か所の並びが同一なことを目視で確認すれば十分だろう。
## PKCS#12形式のファイルを分解する方法
鍵と証明書をワンセットにしたPKCS#12というファイルフォーマットがある。この形式のファイルから鍵と証明書を取り出して使えば取り違えの心配はないといえる。PKCS#12はバイナリ形式なので端末からペーストしてopensslコマンドに与えることはできないだろう。
```shell
openssl pkcs12 -nodes -in PKCS#12ファイル名
```
この時、PKCS#12ファイルを作成する際に指定した暗号化用パスワードを聞かれる。パスワードが正しければ、```-----BEGIN RSA PRIVATE KEY-----``` ... ```-----END RSA PRIVATE KEY-----``` で囲まれた鍵と ```-----BEGIN CERTIFICATE-----``` ... ```-----END CERTIFICATE-----``` で囲まれた証明書が表示されるはずだ。
証明書は複数含まれているかもしれないが、そのうちいくつかは認証局や中間認証局の証明書だろう。それらのいずれでもない物が自分の証明書ということになる(コモンネームを確認)。