TLS証明書の中身を確認したり検証したいときに、いつもコマンドがわからなくなるので、備忘録的にまとめておきます。
本記事で扱わない内容について
- 証明書の発行(証明書署名リクエストの作成やCAの運用など)
- 証明書の各項目の意味やファイル形式の詳細な説明など
今回はあくまで、既にある証明書やサーバー上の証明書の確認などが中心です。
証明書の発行に関わる内容は含みません(それだけでかなりのボリュームになってしまうため)。
また、運用でよく使うコマンドを簡単にまとめたものであり、コマンドやオプションを網羅的に紹介するものではありません。
証明書の内容を表示する
手元にある証明書ファイル(.crt
や.pem
など)の中身を確認したいときのコマンドです。
# 証明書の内容をテキストで表示
openssh x509 -noout -text -in 証明書ファイル
# 証明書のIssuerとSubjectと有効期間を表示
openssl x509 -noout -issuer -subject -dates -in 証明書ファイル
オプションの意味
-
-noout
: 指定した出力オプション以外の出力を抑制する
(これを指定しないと入力の証明書ファイル自体も出力されるので、大抵はお約束のようにつける) -
-text
: 証明書の全ての内容をテキストで出力する -
-issuer
:Issuer
を出力する -
-subject
:Subject
を出力する -
-dates
: 有効期間(notBefore
とnotAfter
)を出力する -
-in
: 入力ファイルを指定する
証明書から公開鍵を取り出す
証明書から公開鍵を取り出したいときのコマンドです。
openssl x509 -noout -pubkey -in 証明書ファイル >公開鍵ファイル
やっていることは「証明書の内容を表示する」と同じです。
指定するオプションが-pubkey
(公開鍵を出力する)になっただけです。
証明書の形式を変換する
DER形式(バイナリ形式)の証明書ファイルとPEM形式(テキスト形式)の証明書ファイルを相互に変換したいときのコマンドです。
# DERからPEMへの変換
openssl x509 -inform DER -in cert.der -outform PEM -out cert.pem
# PEMからDERへの変換
openssl x509 -inform PEM -in cert.pem -outform DER -out cert.der
※入力ファイルの形式は自動的に判別されるので、-inform
は指定しなくてもよさそうです。
サーバーに設定されている証明書を検証する
サーバーに設定されている証明書を検証したいときのコマンドと確認方法です。
openssl s_client -connect example.com:443 -showcerts </dev/null
出力の最後に出てくるVerify return code
が0 (ok)
になっていれば、証明書の検証に成功したということになります。
ややこしいですが、最初のほうに出力される各証明書別のverify return
は1
が正常を意味します。
-showcerts
を指定すると、チェインひとつひとつの証明書も出力されます。
メールサーバーなどSTARTTLSが必要なプロトコルの場合は、-starttls プロトコル
(プロトコルの部分はsmtp
, imap
など)などのオプションを追加指定することで対応できます。
まぁ、普通にブラウザで確認したほうが視覚的にもわかりやすいと思います。
メールサーバーなどブラウザで確認できないプロトコルの場合に役立ちます。
サーバーのTLS設定(プロトコル、暗号スイートなど)を全般的にチェックしたい場合にはsslscanというツールも役に立ちます。
ただし、sslscanは脆弱性診断などによく使われる類のツールであるため取り扱いには十分注意してください。
自身の管理外である第三者のサーバーなどに対して使用すると、不正アクセス禁止法等に抵触する可能性があります。
サーバーの証明書をダウンロードする
サーバーに設定されている証明書をダウンロードしたいときのコマンドです。
openssl s_client -connect example.com:443 </dev/null | openssl x509 >site.pem
検証の時と同様、他のプロトコルの場合は-starttls プロトコル
を指定すればよいでしょう。
(おまけ1)秘密鍵から公開鍵を取り出す
証明書は関係ないですが、秘密鍵から公開鍵を取り出したいときのコマンドです。
openssl rsa -in 秘密鍵 -pubout -out 公開鍵
(おまけ2)秘密鍵にパスフレーズを付けたり外したりする
これも証明書は関係ないですが、秘密鍵にパスフレーズを付けたり外したりしたいときのコマンドです。
# 秘密鍵にパスフレーズをつける
openssl rsa -in 秘密鍵 -out パスフレーズつき秘密鍵 -aes256
# 秘密鍵からパスフレーズを外す
openssl rsa -in パスフレーズつき秘密鍵 -out 秘密鍵
おわりに
備忘録ということもあって特に体系立てた内容ではないですが、たまに証明書ファイルを扱ったりするときに、毎回「どんなコマンドだったっけ、なんかオプションいっぱいあるんだよな」となるので、よく使うコマンドをまとめてみました。