証明書パーサー
X.509証明書はTLS/SSLで使用される公開鍵証明書の標準フォーマットです。このツールはPEMエンコードされた証明書を解析し、サブジェクト、発行者、有効期間、公開鍵の詳細、拡張機能を表示します。HTTPS接続の問題のデバッグに不可欠です。
仕様
よくあるユースケース
- SSL/TLS接続エラーのデバッグ(「証明書の期限切れ」)
- 証明書が正しいドメイン名をカバーしているか確認
- 更新計画のための証明書有効期限の確認
- チェーン内の中間証明書とルート証明書の検査
- 証明書の属性がコンプライアンス要件を満たしているか検証
機能
- PEMエンコードされた証明書の解析(-----BEGIN CERTIFICATE-----)
- サブジェクトと発行者の識別名を表示
- 有効期間の表示(Not Before / Not After)
- 公開鍵のアルゴリズムとサイズを抽出
- Subject Alternative Names(SAN)を表示
- 証明書拡張機能の表示(Key Usage、Extended Key Usage、Basic Constraints)
- Authority/Subject Key Identifierの表示
- CRL配布ポイントとAuthority Information AccessのURL
例
自己署名証明書
試してみる →Subject Alternative Namesを持つexample.com用のX.509証明書。
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIUb7VAvx3CADEDexgoNd41E9Y5tZowDQYJKoZIhvcNAQEL
BQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
DVNhbiBGcmFuY2lzY28xFDASBgNVBAoMC0V4YW1wbGUgSW5jMRQwEgYDVQQLDAtF
bmdpbmVlcmluZzEUMBIGA1UEAwwLZXhhbXBsZS5jb20wHhcNMjYwMTI1MDQ0ODMw
WhcNMjcwMTI1MDQ0ODMwWjB8MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZv
cm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEUMBIGA1UECgwLRXhhbXBsZSBJ
bmMxFDASBgNVBAsMC0VuZ2luZWVyaW5nMRQwEgYDVQQDDAtleGFtcGxlLmNvbTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALKN/rhprC1rfrwKpj9ZqwRR
4c51daZRMlij1NbmUJn7KiZTghxu1OtOEodGmpcF3xuWxiBYTOKvQZ+qPpED6IAG
IYtANPetAkRbsf/xdZZZ/BRR3jQQ2AVDfyuBSYjYEV4JMVG47JCj7oewgNb0dejv
HI18aBWzIGE6v9Zv5FDt+d3GjJignI8elrGzrnJg85qsd743xSEPALqf1NsyhjtY
Th91DazAOoPzA/DMXzoXUhAf9C5uWQlSdn6JDzs8/ld0c+LZH9ohvC/IN/PfdkYg
NYR2AJutUdxbOPPmcFm46o/WpquV2H0mIMuvdzI+k/tk6wVV2jwu2ysQLwweqecC
AwEAAaOBjjCBizAdBgNVHQ4EFgQU9Th/a8eJZ9DHh5uUGyf+iTSNF14wHwYDVR0j
BBgwFoAU9Th/a8eJZ9DHh5uUGyf+iTSNF14wDwYDVR0TAQH/BAUwAwEB/zA4BgNV
HREEMTAvggtleGFtcGxlLmNvbYIPd3d3LmV4YW1wbGUuY29tgg9hcGkuZXhhbXBs
ZS5jb20wDQYJKoZIhvcNAQELBQADggEBAE1rGDKmhMBkcdwZva/9CouLeLOIHBiI
uPH1LV6Pbl2KJ11w1L36SstF17+M3Sn0SJxstCePJWlfLlx6r5JZSyNAQghmgep1
/YWrsDtC3bjs4stOz1FWUgUDs+b7pf+h93lLTShX8mue2rjIXbYJPJx9XsCmyx1R
zLuYSoOSQ/0aR7NSzjqgoHEUNI/2mGTRJ6ngC0vx88ppn+tuk8PyAXt8kp8hPx3I
6lmmyzfuwt0JZIawW2p1nkMlGt2IBIxBBY7vjAHCTDRa69YP08QeImDM13FelUVh
tXPOCJaWXZQmppgKNtmpedswRRtOyl83cqzkz4rZRpjnpPqIEWNQ9bs=
-----END CERTIFICATE-----秘密鍵
試してみる →PKCS#8形式の対応するRSA秘密鍵。
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyjf64aawta368
CqY/WasEUeHOdXWmUTJYo9TW5lCZ+yomU4IcbtTrThKHRpqXBd8blsYgWEzir0Gf
qj6RA+iABiGLQDT3rQJEW7H/8XWWWfwUUd40ENgFQ38rgUmI2BFeCTFRuOyQo+6H
sIDW9HXo7xyNfGgVsyBhOr/Wb+RQ7fndxoyYoJyPHpaxs65yYPOarHe+N8UhDwC6
n9TbMoY7WE4fdQ2swDqD8wPwzF86F1IQH/QublkJUnZ+iQ87PP5XdHPi2R/aIbwv
yDfz33ZGIDWEdgCbrVHcWzjz5nBZuOqP1qarldh9JiDLr3cyPpP7ZOsFVdo8Ltsr
EC8MHqnnAgMBAAECggEAANyt1b1JqlASJPcQMmiABBDsVcJvacW+lOFfNHv/XtIk
AMD3QdfiVnh8BZ2SC+Sbw4nvNVZeMkH4v4j84FcnSjO9YB5Ub+9GSyCXzWdT0zQA
AyeAbe2FSkRqWsI3CETl+iqlMekCPpIfPRYQqSw1w+tTm5APZWHSzpiQA7ydwSsP
sJ1QBq64eXSXFhpyLG0LE4ATeyH9dxj9n9NocL0QOqT+Tl5Dcjlxc7fYmoHStC0q
9Xb5h1Po3kmESAELdUobBbJvJFVK98PMB6osUR4VM4snQJOJZ+4Df7bxU311OgLB
Am/mQjsnyZqBWjDQaUj/BGnapJxqB+a102Ki3XMX4QKBgQDcmUc0c+zfRfnic22Q
ytJ3Y29N1C52GESFulL+cYfwwfVK/VXWT1b/eECABVWZvzP22wyEnkodkYWSoN86
GK2PvH8ii9EpkkCtRabFqmbfqPysTKawu9/BgrVAvEvRQjHHAUZnytwtw+IcL6Nz
EjQ4UrFK+3/rycT05I/ToHRgGQKBgQDPNXI0OSJ1nl7YQOry4C4ekT/uCJAbV7bN
MU49iSMqldlXy+VvSKAwErzvaAtQUolvu3DPw2hcpMxuH+hoHweTA0lu0VbZRKvS
1EhMWQGN2qrSQYcnhvKY/BUbd7KjZ858PeOBcTgyCfBkfdBNgughjsCv2BxKGxQI
Li2gSWSZ/wKBgF0M2pgpffUAE1ON1N2KcBSkAMMXiTGPMvgli/R/9xN6/PjQu3BW
rx+7nZlipqTfng+2fiVCj4jBZVJgQUjEOBG1NPthdqzOYDG2e45NPm+BXHNhMb7C
wLNjawkPY/u0rEKBKy2EyDMVuT6iaZOUTiqj1t0GEQNobIfQEUr3F5+hAoGAZuD3
afxwIovWNXLN9HbgDyc44Zt4yUqcpXZ0jVL4ld0+wzumF8GsXxH+orM64s+IE2Sy
V0WDHHRqV8cZ4hB99z0riY0AnPFeilgB6X5Lqj3GkIweab6z1sdaR3//vuf8em1T
9uHa7+VFaO+aq9FyJa819ljLevPE12buGmY2P8sCgYEAoSk3KwiEO9zvxuuwqdBh
Qv/dvWPgh/KttWcoL6Axt1z4gG+vdidn8xIdVGy6xnQOYpm+ANqRpWO82Hws5ITy
8uDn/S2kjQnyh8Cz7jJLBiJUxz/ZWfUz56cQq3Bej46oJN6UKkhJ9ogAjUJAYjV1
7JIWxv6OC7Cg6xfHCGRa7F0=
-----END PRIVATE KEY-----ヒント
- ブラウザから証明書をエクスポート: 鍵アイコンをクリック > 証明書 > 詳細 > エクスポート。
- サイトの証明書を取得: openssl s_client -connect example.com:443
- SAN(Subject Alternative Names)はすべての有効なドメイン名を一覧表示します。
- ルート証明書は自己署名(発行者 = サブジェクト)です。
- 証明書チェーンの確認: openssl verify -CAfile ca.pem cert.pem
解説 証明書パーサー
X.509証明書はインターネットにおける信頼の基盤であり、HTTPS接続のTLS/SSL暗号化、コード署名、メールセキュリティ(S/MIME)、VPN認証を可能にします。証明書は公開鍵をアイデンティティ(ドメイン名、組織、または個人)に紐付け、認証局(CA)がこの紐付けをデジタル署名することで保証します。
証明書は通常PEM形式で保存されます。これはBase64エンコードされたDERデータが-----BEGIN CERTIFICATE-----と-----END CERTIFICATE-----のマーカーで囲まれたものです。証明書にはサブジェクト(証明書が識別する対象)、発行者(署名した者)、有効期間(Not BeforeとNot Afterの日付)、サブジェクトの公開鍵、および使用法を制御する拡張機能が含まれます。Subject Alternative Name(SAN)拡張機能は、証明書がカバーするすべてのドメイン名を一覧表示します。
証明書チェーンは、エンドエンティティ証明書を1つ以上の中間CAを通じて信頼されたルートCAにリンクすることで信頼を確立します。ブラウザがWebサイトに接続すると、チェーンを検証します: サーバーの証明書が中間CAによって署名され、その中間CAがブラウザが信頼するルートCAによって署名されているかを確認します。壊れたチェーン(中間証明書の欠落や不明なルート)は、おなじみの「この接続ではプライバシーが保護されません」エラーを引き起こします。
証明書管理は障害の一般的な原因です。期限切れの証明書は即座にサービス中断を引き起こします。ドメイン名の不一致はブラウザ警告を発生させます。中間証明書の欠落は一部のブラウザ(キャッシュまたは取得する可能性がある)では動作しますが、他のブラウザやAPIクライアントでは失敗します。Let's Encryptやcertbotなどのツールで証明書の有効期限を監視し、更新を自動化することは、信頼性の高い運用に不可欠です。
証明書の有効期限を確認するには、PEMコンテンツをこのツールに貼り付けてNot Afterの日付を確認してください。コマンドラインからは、ローカルファイルの場合はopenssl x509 -enddate -noout -in cert.pemを実行し、リモートサーバーの場合はopenssl s_client -connect example.com:443をopenssl x509 -noout -enddateにパイプします。certbot、cert-manager、または専用の監視サービスによる自動監視は、障害を防ぐために有効期限のかなり前にアラートを出すことができます。
ルート証明書は自己署名(発行者がサブジェクトと等しい)であり、トラストアンカーとしてブラウザやオペレーティングシステムにプリインストールされています。中間証明書はルートCAによって署名され、エンドエンティティ証明書の署名に使用されます。この信頼のチェーンはルート鍵を保護します。中間証明書が侵害された場合、ルートではなくその中間証明書のみが失効されます。サーバーは完全なチェーン(エンドエンティティとすべての中間証明書)を送信する必要がありますが、ルート証明書自体は含めるべきではありません。
Subject Alternative Names(SAN)は、証明書が有効なすべてのドメイン名とIPアドレスを一覧表示します。単一の証明書でSANを使用してexample.com、www.example.com、api.example.comなどの複数のドメインを保護できます。最新のブラウザはドメイン検証にCommon Name(CN)フィールドではなくSANを使用します。ワイルドカード証明書(*.example.com)は1レベルのサブドメインをカバーしますが、ネイキッドドメイン自体はカバーしません。
ブラウザでは動作するがAPIクライアントでは失敗する証明書は、不完全な証明書チェーンが原因の一般的な問題です。ブラウザはより寛容で、AIA(Authority Information Access)フェッチングで欠落した中間証明書を自動的に取得したり、以前にキャッシュした中間証明書を使用したりします。curl、Node.js、PythonのrequestsライブラリなどのAPIクライアントは通常、完全なチェーンがサーバーから送信されることを要求します。サーバーがエンドエンティティ証明書とすべての中間証明書を送信するように構成されていることを確認し、curl -vまたはopenssl s_clientでチェーンの完全性をテストしてください。