証明書をデコードする手順
- 証明書を
-----BEGIN CERTIFICATE-----と-----END CERTIFICATE-----の行も含めてボックスに貼り付けます。これらの行のない生の Base64 DER や、30 82で始まる 16進ダンプも受け付けます。 - または、
.pem、.crt、.cer、.der、.p7b、.crlファイルをボックスにドロップします。バイナリの DER ファイルも、先に変換せずにそのまま使えます。 - カードを読みます。入力内のオブジェクトごとに 1 枚のカードが表示されるので、証明書が 3 つ入った
fullchain.pemなら 3 枚になります。 - 生のツリーが必要なときは、カードの下の ASN.1 構造 を開きます。たとえば、概要で その他の拡張 に挙げられた拡張を探すときです。
レイアウトを見たいだけなら、サンプル ボタンでデモ用の証明書を読み込めます。
デコーダーが表示するもの
| フィールド | 確認するポイント |
|---|---|
| サブジェクト、発行者 | 証明書の対象者と署名者。両者が同じなら自己署名の印が付きます。 |
| 有効期間の開始/終了 | 残り日数に加え、期限切れ、まだ有効でない、期限まで 30 日未満のいずれかなら警告します。 |
| サブジェクト代替名(SAN) | 証明書が有効なホスト名と IP。ブラウザはホスト名をこの一覧と照合し、CN は無視します。 |
| 公開鍵、署名アルゴリズム | たとえば EC P-256 と ecdsa-with-SHA256、または RSA とそのビット長。 |
| 鍵用途、拡張鍵用途 | TLS サーバー証明書には、EKU に serverAuth が必要です。 |
| 基本制約 | CA:TRUE は中間証明書かルート証明書を示します。 |
| サブジェクト鍵識別子、認証局鍵識別子 | 証明書の AKI は、それを発行した証明書の SKI と一致します。チェーンを正しい順に並べる手がかりになります。 |
| CRL 配布ポイント、OCSP、CA 発行者 | プレーンテキストとして表示します。ページがこれらを取得することはありません。 |
| SHA-1 と SHA-256 のフィンガープリント | DER 全体のハッシュで、証明書管理ツールやピン留めの設定が比較する値です。 |
| SPKI SHA-256 ピン | 公開鍵だけの SHA-256 を Base64 にしたもの。同じ鍵で証明書を更新すれば変わりません。 |
チェーン、バンドル、混在したファイル
サーバーは通常チェーンを送ります。最初にリーフ証明書、その後に 1 つ以上の中間証明書が続きます。fullchain.pem 全体を貼り付けてカードを順にたどってください。カード 1 の発行者がカード 2 のサブジェクトになっているはずで、AKI と SKI の値も同じように対応しているはずです。中間証明書を自分で取得しないクライアントで「unable to get local issuer certificate」エラーが出る原因は、たいてい順序の誤りか中間証明書の欠落です。
PKCS#7 バンドル(-----BEGIN PKCS7-----。Windows や CA のポータルから入手する .p7b であることが多い)も開けて、中の証明書ごとにカードが表示されます。種類の違うオブジェクトを 1 回の貼り付けに混ぜることもできます。証明書、その CSR、その秘密鍵といった具合です。3 つの SPKI SHA-256 ピン の行が同じなら、鍵、要求、証明書は同じ鍵ペアに属しています。
先頭の文字で証明書データを見分ける
ヘッダー行がなければ、証明書は DER を Base64 にしただけのもので、DER は必ず SEQUENCE のバイト 0x30 で始まります。そこから、知っておくと役立つ接頭辞がいくつか出てきます。
| 先頭の文字 | たいていの中身 |
|---|---|
MIIB | 260〜515 バイトの DER。小さな EC 証明書など(下の例は 443 バイト) |
MIIC | 516〜771 バイトの DER |
MIID、MIIE、MIIF | 772〜1,539 バイトの DER。RSA-2048 証明書の典型的なサイズ |
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE | EC P-256 の公開鍵(SPKI) |
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A | RSA-2048 の公開鍵(SPKI) |
4 文字目は長さのバイトに由来するため、サイズによって変わります。ほかのパターンは よく見る Base64 の接頭辞 にまとめています。
OpenSSL で証明書をデコードする
コマンドラインで同じフィールドを確認できます。
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -subject -issuer -dates -ext subjectAltName
openssl x509 -in cert.pem -noout -fingerprint -sha256
openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl base64
最後の行は SPKI ピンを出力し、ここに表示されるピンと一致します。稼働中のサーバーが送るチェーンを取得するには、openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null を実行してその出力を貼り付けてください。デコーダーは周囲のテキストから PEM ブロックを拾い出します。ほかのワンライナーは OpenSSL の Base64 ページ にあります。
よくある問題
- 「—–BEGIN 行はありますが、同じラベルの —–END 行がありません。」:コピーが途中で切れています。もう一度コピーするか、ファイルをドロップしてください。
- 「PEM でも有効な Base64 DER でもありません」:入力がどちらでもありません。よくある原因は、バイナリファイルをテキストエディターで開いて貼り付けたか、Base64 がチャットやメールのクライアントを経由する途中で文字を失ったことです。
- 「これは PEM ではなく SSH 公開鍵です。」:
ssh-ed25519 AAAA…の行は SSH 鍵フィンガープリントツール で扱います。-----BEGIN OPENSSH PRIVATE KEY-----も同様です。 - フィンガープリントに「安全な(https)ページが必要です」と表示される:ハッシュにはブラウザの WebCrypto API を使っており、これは https か localhost でしか動作しません。https でページを開いてください。
.pfxや.p12ファイル:PKCS#12 の中身はエクスポート時のパスワードで暗号化されているため、外側の構造しか表示できません。先にopenssl pkcs12 -in file.pfx -nokeys -out cert.pemで証明書を取り出してください。
よくある質問
SSL 証明書の有効期限を確認するには?
上の入力欄に貼り付け、有効期間の終了 を確認してください。デコーダーは残り日数を添え、30 日を切っているか期限が過ぎている場合は警告します。シェルなら openssl x509 -in cert.pem -noout -enddate で同じ日付が出力されます。
.pem、.crt、.cer ファイルの違いは何ですか?
拡張子は慣習にすぎません。.pem ファイルは常に -----BEGIN 行の付いた Base64 テキストですが、.crt と .cer はそのテキストの場合もバイナリの DER の場合もあります。ファイルをここにドロップすれば、デコーダーはどちらも読めます。
このツールで証明書チェーンや失効状態を検証できますか?
できません。すべてのフィールドを読み取りますが、ページが他のサーバーに接続できないため、署名、チェーン、OCSP/CRL の状態は確認しません。チェーンの検証には openssl verify -CAfile chain.pem cert.pem を使ってください。
証明書と一緒に秘密鍵を貼り付けてもよいですか?
はい。両者が対応しているかを確かめる最も手早い方法です。SPKI SHA-256 ピン の値が一致すれば、同じ鍵ペアです。秘密鍵についてはツールは種類とサイズだけを表示し、ASN.1 ツリー内の秘密の値は非表示にします。