証明書や鍵まわりで困ったら、だいたい openssl コマンドで中身を確認すれば解決します。 この記事は、「確認」系の openssl コマンドを用途別に総ざらいしたチートシートです。コピペで使ってください。実際の出力例と、つまずきやすいエラー例も載せました。
この記事は OpenSSL 3.x(手元は 3.6.2)で実際に実行して確認しています。
openssl versionで自分の版を確認できます。古い 1.0.x 系だと一部オプションの既定が違うことがあります。出力例の証明書はこの記事用に作ったテスト用(www.example.com)なので、値はお手元のものに読み替えてください。
0. インストール
# macOS(Homebrew) brew install openssl # Linux(RedHat/CentOS/Rocky/Alma 系) sudo dnf install openssl # 古い環境は: sudo yum install openssl # Linux(Debian/Ubuntu 系) sudo apt-get install openssl
openssl version # バージョン確認
OpenSSL 3.6.2 7 Apr 2026 (Library: OpenSSL 3.6.2 7 Apr 2026)
1. 証明書(crt / cer / pem)の中身を見る
全体をテキストで表示
openssl x509 -in cert.pem -noout -text
冒頭はこんな見た目です(長いので先頭だけ)。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
28:a2:ca:d3:82:0c:26:a9:4a:59:0b:a1:be:1d:68:2f:48:53:cf:c8
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=JP, O=Example CA, CN=Example Intermediate CA
Validity
Not Before: Jun 24 13:48:19 2026 GMT
Not After : Jun 24 13:48:19 2027 GMT
Subject: C=JP, O=Example Inc, CN=www.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
DER(バイナリ)の証明書なら -inform der を付けます。
openssl x509 -inform der -in cert.der -noout -text
よく見たい項目だけピンポイントで
# 有効期限(開始・終了) openssl x509 -in cert.pem -noout -dates
notBefore=Jun 24 13:48:19 2026 GMT notAfter=Jun 24 13:48:19 2027 GMT
# 持ち主(Subject)と発行者(Issuer) openssl x509 -in cert.pem -noout -subject -issuer
subject=C=JP, O=Example Inc, CN=www.example.com issuer=C=JP, O=Example CA, CN=Example Intermediate CA
# コモンネーム/SAN(対応ドメイン) openssl x509 -in cert.pem -noout -ext subjectAltName
X509v3 Subject Alternative Name:
DNS:www.example.com, DNS:example.com
# フィンガープリント(指紋。証明書を一意に表すハッシュ値) openssl x509 -in cert.pem -noout -fingerprint -sha256
sha256 Fingerprint=24:05:09:37:66:CC:51:90:F6:71:20:E6:25:E6:1F:FE:36:D2:72:47:23:36:1C:0B:17:D3:36:F9:20:96:FC:9A
SHA-1 のフィンガープリント(
-sha1)も出せますが、SHA-1 は弱いのでいまは SHA-256 を基本に。
証明書が「いつ失効するか」を残り日数で確認
# 証明書が30日以内に切れるなら exit code 1(監視スクリプト向け) openssl x509 -in cert.pem -noout -checkend $((30*24*60*60))
まだ余裕があれば次のように出て、終了コードは 0。
Certificate will not expire
すでに切れている/指定期間内に切れる場合は、こう出て終了コードが 1 になります。スクリプトはこの終了コードで判定します。
Certificate will expire
# 終了コードだけ見たいとき openssl x509 -in cert.pem -noout -checkend 0 ; echo "exit=$?" # exit=0 なら有効、exit=1 なら失効済み
2. 秘密鍵(key)の中身を見る
秘密鍵は RSA だけでなく EC(楕円曲線)も普及しています。鍵の種類を問わない openssl pkey が便利です。
# 汎用(RSA/EC どちらでもOK)。鍵の中身を表示 openssl pkey -in key.pem -noout -text # RSA鍵に限定した昔ながらのコマンド(今も使える) openssl rsa -in key.pem -noout -text # EC鍵 openssl ec -in key.pem -noout -text
鍵が壊れていないか/パスフレーズが合っているか確認
openssl pkey -in key.pem -noout -check
健全なら一言だけ返ります。
Key is valid
パスフレーズ付きの鍵なら、ここでパスフレーズを聞かれます。通れば鍵は健全です。
3. 証明書と秘密鍵が「ペアかどうか」確認する
「サーバ証明書」と「秘密鍵」がちゃんと対になっているかは、トラブルの定番チェックです。 同じ公開鍵(の指紋)が出れば一致しています。
# 証明書側の公開鍵の指紋 openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 # 秘密鍵側の公開鍵の指紋 openssl pkey -in key.pem -pubout -outform der | openssl dgst -sha256
ペアなら、2つのハッシュ値がぴったり一致します。
SHA2-256(stdin)= 719f234ab37d1a37eb91711e3523ff20d190eb14c9c257ba4f55d05113b05d42 SHA2-256(stdin)= 719f234ab37d1a37eb91711e3523ff20d190eb14c9c257ba4f55d05113b05d42
ペアでない(証明書と鍵が食い違っている)場合は、値が変わって一致しません。「鍵と証明書が合っていない」エラーの正体はこれです。
SHA2-256(stdin)= 719f234ab37d1a37eb91711e3523ff20d190eb14c9c257ba4f55d05113b05d42 SHA2-256(stdin)= 46b4dfa6ec12127eaae40cc8ff77f26b83940d29271f56b552594b09e3f5e56d ← 違う鍵
古い記事では
openssl x509 -modulusとopenssl rsa -modulusの MD5 を比べる方法が有名ですが、これは RSA 鍵専用です。EC鍵にも効く上のやり方を覚えておくと安心です。
4. CSR(証明書署名要求)の中身を見る
openssl req -in request.csr -noout -text # 申請先のドメイン・組織(Subject)だけ確認 openssl req -in request.csr -noout -subject
subject=C=JP, O=Example Inc, CN=www.example.com
# CSR の署名が壊れていないか検証 openssl req -in request.csr -noout -verify
Certificate request self-signature verify OK
5. PEM に何が入っているか一覧する
1つの pem に証明書や鍵が複数連結されていると、何が入っているか分かりにくいもの。 OpenSSL 3.x の storeutl でまとめて列挙できます。
openssl storeutl -noout -text bundle.pem
証明書だけを順番に確認したいときは、こんな手もあります。
# bundle.pem に含まれる証明書すべての Subject/Issuer を一覧 openssl crl2pkcs7 -nocrl -certfile bundle.pem | \ openssl pkcs7 -print_certs -noout
サーバ証明書 → 中間証明書の順に、誰が誰に署名したか(チェーン)が読み取れます。
subject=C=JP, O=Example Inc, CN=www.example.com issuer=C=JP, O=Example CA, CN=Example Intermediate CA subject=C=JP, O=Example CA, CN=Example Intermediate CA issuer=C=JP, O=Example CA, CN=Example Root CA
subject(持ち主)と次の証明書の関係を見ると、www.example.comを中間CAが署名し、その中間CAをルートCAが署名している、という連鎖が分かります。チェーンの考え方は PKI入門 を参照。
6. サーバに繋いで証明書を確認する(s_client)
ファイルが手元になくても、動いているサーバに繋いで証明書を確認できます。トラブル調査でいちばん使います。
# サーバの証明書チェーンを表示 openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null # 証明書部分だけ取り出して有効期限を見る openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null \ | openssl x509 -noout -dates -subject -issuer
-servername(SNI)は、1つのIPで複数サイトを配信している今どきのサーバではほぼ必須です。付けないと別の証明書が返ることがあります。-showcertsを付けると中間証明書まで全部表示され、チェーンの設置漏れを確認できます。
openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts </dev/null
証明書チェーンの検証
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null \ | grep -i "Verify return code"
Verify return code: 0 (ok)
0 (ok) 以外が出たら検証失敗です。よく出るのは中間証明書の設置漏れによる 21 (unable to verify the first certificate) で、サーバ側に中間証明書を連結すれば直ります。
7. PFX / p12(証明書+鍵の束)の中身を見る
# 中身を表示(パスワードを聞かれる) openssl pkcs12 -in cert.pfx -info -noout
MAC: sha256, Iteration 2048 MAC length: 32, salt length: 16 PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256 Certificate bag Certificate bag PKCS7 Data Shrouded Keybag: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256
Certificate bag(証明書)と Shrouded Keybag(暗号化された秘密鍵)が、1ファイルに同梱されているのが分かります。
PFX を PEM に取り出す/PEM から PFX を作るなどの変換は、別記事にまとめています。
8. よくあるエラーと原因
実行ミスでよく出るメッセージと、その意味です。
形式の指定ミス(PEM なのに -inform der)
openssl x509 -inform der -in cert.pem -noout -text
Could not find certificate from cert.pem ... DECODER routines:OSSL_DECODER_from_bio:unsupported: ... Input type: DER
→ ファイルは PEM(テキスト)なのに DER(バイナリ)として読もうとしています。-inform der を外す(PEM はそのまま読めます)。逆に DER ファイルに -inform der を付け忘れた場合も同種のエラーになります。file cert.pem や先頭の -----BEGIN の有無で形式を見分けましょう(形式まとめ)。
PFX のパスワード違い
openssl pkcs12 -in cert.pfx -info -noout -passin pass:wrongpass
Mac verify error: invalid password?
→ PFX のパスワードが違います。書き出したときのパスワードを確認してください。
「鍵と証明書が一致しない」
サーバ起動時に key values mismatch などと言われたら、3章のペア確認で指紋を突き合わせます。値が食い違っていれば、証明書か鍵のどちらかが別物です。
さいごに
- 証明書 →
openssl x509、鍵 →openssl pkey、CSR →openssl req、サーバ直 →openssl s_client。この4つを押さえればだいたい確認できます。 - ファイル形式そのものの違い(PEM/DER/PFX…)は 証明書ファイルの形式まとめ、鍵と証明書の関係は PKI入門 をどうぞ。
- pem 単体の中身確認の基本は pem ファイルとは? にあります。