OpenSSLで証明書の中身を確認する:有効期限・SAN・発行者の読み方
作成日:2026.10.15
OpenSSLで証明書ファイルの内容を表示し、有効期限・SAN・発行者を確認する方法を解説します。正常・期限切れ・ホスト名不一致の例を比較し、出力や終了コードの読み方、内容の確認と信頼関係の検証の違いを紹介します。
目次
OpenSSLで証明書を作成したら、有効期限や対象のホスト名が意図した内容になっているか確認しておきたいところです。作成コマンドが成功しても、設定したつもりのSANが入っていない、といったことは確認しないと分かりません。
今回は、証明書ファイルの中身を表示する方法と、有効期限・SAN・発行者の読み方を説明します。後半では、説明用の証明書を使って、正常・期限切れ・ホスト名不一致の結果を比較してみます。
検証環境はWindows上のPowerShell 7.6.6、OpenSSL 3.4.0です。証明書はPEM形式を主例にし、2026年10月15日時点の公式資料とコマンドの実行結果を確認しています。OpenSSLの導入はWindowsにOpenSSLをインストールする方法、作成手順はOpenSSLで自己署名証明書を作成する記事を参照してください。
証明書の内容を表示する
証明書の内容を確認するには、openssl x509を使います。手元の証明書ファイルがcertificate.crtなら、次のように実行します。
openssl x509 -in certificate.crt -noout -text
-inは入力ファイル、-textは内容のテキスト表示です。-nooutを付けると、PEM形式の証明書本体は出力せず、指定した情報だけを表示できます。この確認に秘密鍵は不要です。
出力は長いので、まずは次の項目を確認するとよいかと思います。
| 項目 | 確認する内容 |
|---|---|
| Validity | Not Beforeが有効期間の開始、Not Afterが終了 |
| X509v3 Subject Alternative Name | 接続先として使うDNS名やIPアドレス |
| Subject | 証明書の対象を表す名前 |
| Issuer | 証明書の発行者を表す名前 |
なお、.crtや.cerといった拡張子だけでは、PEM形式かDER形式かは判断できません。DER形式と分かっている証明書なら、-inform DERを指定します。
openssl x509 -inform DER -in certificate.der -noout -text
有効期限・SAN・発行者を個別に見る
必要な項目だけを見る場合は、表示用のオプションを組み合わせます。
openssl x509 -in certificate.crt -noout -dates -subject -issuer -ext subjectAltName
次のような出力になります。日時は作成したタイミングによって変わります。
notBefore=Oct 14 21:43:39 2026 GMT
notAfter=Oct 14 21:43:39 2027 GMT
subject=CN=demo.example.test
issuer=CN=demo.example.test
X509v3 Subject Alternative Name:
DNS:demo.example.test
notBeforeとnotAfterは、両方確認する
notBeforeが有効期間の開始、notAfterが終了です。終了前でも、開始日時より前ならまだ有効期間に入っていません。
上の出力のGMTは、日本時間ではなくUTCと同じ時刻として読みます。例えば、Oct 14 21:43:39 2026 GMTは、日本時間では2026年10月15日6時43分39秒です。日付がずれることもあるので、比較する時刻のタイムゾーンをそろえて確認しましょう。
SANには、実際に使う接続先の名前があるか
SANはSubject Alternative Nameの略で、上の例ではDNS:demo.example.testが入っています。アクセスする名前がother.example.testなら、このSANとは一致しません。
SubjectのCNだけを見て確認を終えず、SANに意図した名前が入っているかを見ます。IPアドレスでアクセスする場合は、DNS名とは別にSANのIPアドレスを確認する必要があります。今回はDNS名の例に絞ります。
Issuerの表示だけで、信頼できるとは判断しない
subjectは対象の名前、issuerは発行者の名前です。この検証用証明書は自己署名なので、両方がCN=demo.example.testになっています。
ただし、SubjectとIssuerが同じという表示だけでは、自己署名の検証や信頼の確認が済んだことにはなりません。発行者の名前が読めることと、その証明書を信頼できることは分けて考えます。
期限とホスト名をコマンドで確認する
7日以内に期限切れになるか
-checkendには、現在から何秒以内に期限が切れるかを指定します。7日なら7 × 24 × 60 × 60 = 604800秒です。
openssl x509 -in certificate.crt -noout -checkend 604800
$LASTEXITCODE
期限がその範囲内に来なければ終了コードは0、期限切れ済み、または指定した秒数以内に切れる場合は非0になります。読み込み失敗なども非0なので、メッセージも一緒に確認します。-checkend 0なら、現在時刻で期限切れになっているかを確認できます。
この確認は終了日時のチェックです。有効期間の開始、ホスト名、信頼関係までまとめて検証するものではありません。
使いたいホスト名と一致するか
ホスト名だけを確認するには、-checkhostを使います。
openssl x509 -in certificate.crt -noout -checkhost demo.example.test
$LASTEXITCODE
今回の環境では、一致するとdoes match certificateと終了コード0、不一致ならdoes NOT match certificateと終了コード1でした。この判定も、期限や信頼関係とは別です。
OpenSSLの名前照合は、SANの状態によってCNを参照する場合もあります。-checkhostが成功したことだけで、SANが正しく設定されていると判断せず、先ほどの表示結果と合わせて確認してください。各オプションの説明は、OpenSSL 3.4のx509コマンドの公式資料を参照してください。
検証用の証明書を用意する
ここからは、名前と期限の違いを比較してみます。空の作業用ディレクトリで、次のコマンドを実行してください。同名のファイルがない場所を使います。
openssl req -x509 -newkey rsa:2048 -sha256 -noenc `
-keyout demo.key -out demo.crt -days 365 `
-subj "/CN=demo.example.test" `
-addext "subjectAltName=DNS:demo.example.test" `
-addext "basicConstraints=critical,CA:FALSE"
PowerShellでは、行末のバッククォートでコマンドを次の行へ続けられます。バッククォートの後ろには空白を入れないでください。
demo.crtが自己署名証明書、demo.keyが秘密鍵です。-sha256で署名のハッシュを明示し、-addextでSANと、CA用ではないことを設定しています。-noencは秘密鍵を暗号化しない指定です。この鍵は説明用の検証にだけ使い、公開したり本番へ流用したりしないでください。
作成できたら、まず内容を表示します。
openssl x509 -in demo.crt -noout -dates -subject -issuer -ext subjectAltName
正常・ホスト名不一致・期限切れを比較する
証明書の検証にはopenssl verifyを使います。今回の比較では、作成した自己署名証明書を-CAfileで明示的に信頼させ、期限や名前の違いを確認します。
これは、このコマンドでの検証条件を指定するものです。Windowsやブラウザへ証明書を登録する操作ではありません。また、知らない証明書を無条件に信頼させてよい、という意味でもありません。
正常な場合
openssl verify -CAfile demo.crt -check_ss_sig `
-purpose sslserver -verify_hostname demo.example.test demo.crt
$LASTEXITCODE
-purpose sslserverはTLSサーバー用途、-verify_hostnameは期待するホスト名です。-check_ss_sigで、信頼の起点にした自己署名証明書の署名も確認します。末尾のdemo.crtが検証対象です。
作成直後の証明書では、次の結果になりました。
demo.crt: OK
0
ホスト名が一致しない場合
同じ証明書のまま、期待する名前だけを変えてみます。
openssl verify -CAfile demo.crt -check_ss_sig `
-purpose sslserver -verify_hostname other.example.test demo.crt
$LASTEXITCODE
CN=demo.example.test
error 62 at 0 depth lookup: hostname mismatch
error demo.crt: verification failed
2
hostname mismatchがホスト名不一致です。0 depthは、検証対象の証明書自身で問題が見つかったことを表します。エラー番号62と、コマンドの終了コード2は別の値です。
期限切れの場合
期限切れを待つ代わりに、同じ検証用の鍵で、有効期間が2025年1月1日から1月2日までの証明書を作ります。元のdemo.crtは残し、別のexpired.crtへ出力します。
openssl x509 -in demo.crt -key demo.key -sha256 `
-not_before 20250101000000Z -not_after 20250102000000Z `
-out expired.crt
openssl x509 -in expired.crt -noout -dates
ここで使う-not_beforeと-not_afterは、対象のOpenSSL 3.4.0で確認しています。古い版では使えない場合があるので、openssl versionとopenssl x509 -helpで確認してください。指定値の末尾のZはUTCを表します。
notBefore=Jan 1 00:00:00 2025 GMT
notAfter=Jan 2 00:00:00 2025 GMT
今度はこの証明書を信頼対象・検証対象にし、名前は正しい値のまま検証します。
openssl verify -CAfile expired.crt -check_ss_sig `
-purpose sslserver -verify_hostname demo.example.test expired.crt
$LASTEXITCODE
CN=demo.example.test
error 10 at 0 depth lookup: certificate has expired
error expired.crt: verification failed
2
2026年10月15日時点の検証では、certificate has expiredとなりました。信頼する証明書として指定しても、有効期間の検証を通るわけではないことが分かります。
| 比較条件 | 主な表示 | 今回の終了コード |
|---|---|---|
| 作成直後・名前一致 | OK | 0 |
| 作成直後・名前不一致 | hostname mismatch | 2 |
| 期限切れ・名前一致 | certificate has expired | 2 |
PowerShellの$LASTEXITCODEは、直前に実行したネイティブコマンドの終了コードです。別のコマンドを実行する前に確認します。表の数値は今回の環境での結果で、失敗理由は終了コードだけでなくエラーメッセージと合わせて読みます。
検証に通った範囲を確認する
OKは、指定した信頼対象・用途・ホスト名と、検証時刻などの条件で検証に通ったという結果です。ブラウザで問題なく使えることや、サーバーがこの証明書を実際に返していることまで確認したわけではありません。
CA発行の証明書を確認する場合は、自分で信頼できると確認したルートCAと、必要な中間証明書を用意します。次は、そのファイルが手元にある場合の構文例です。今回の自己署名証明書による比較とは別で、この構成での実行は未確認です。
openssl verify -CAfile trusted-root.pem -untrusted intermediates.pem `
-purpose sslserver -verify_hostname www.example.com server.crt
-untrustedは、チェーンを組み立てるための中間証明書を渡す指定です。そこへ置いた証明書を、それだけで信頼の起点にするものではありません。また、今回のコマンドでは失効確認を行っていません。
検証条件の詳細は、OpenSSL 3.4のverifyコマンドの説明と、証明書の検証オプションの公式資料を参照してください。
まずは内容を表示して、有効期間・SAN・発行者が期待どおりかを確認し、その後に必要な条件で検証する、という順番で進めると切り分けやすくなります。検証が終わったら、今回作成したdemo.key・demo.crt・expired.crtは、作業用ディレクトリから削除してください。
奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
OpenSSLで作る自己署名証明書 ― コマンドラインで実践するオレオレ証明書作成手順
2025.04.09
OpenSSLを用いて、自己署名証明書(オレオレ証明書)を作成する方法を、分かりやすく解説します。秘密鍵の生成、パスフレーズの設定・解除、CSRの作成、そして証明書ファイルの発行まで、コマンドラインで実践する手順を具体的な例とともに解説。セキュリティ上のポイントにも触れながら、初心者でも実践できる内容です。
XAMPP環境でHTTPSを有効にする方法:Windows向けガイド
2025.01.19
WindowsのXAMPP環境でHTTPSを有効にするための具体的な手順を解説します。OpenSSLのインストールから証明書の設定まで、詳細なステップを追って説明します。
WindowsにOpenSSLをインストールする方法:ダウンロードから設定までの初心者向けガイド
2025.01.15
OpenSSLをWindowsに導入したい初心者の方に向けて、ダウンロード、インストール、環境変数の設定までを丁寧に説明します。必要な手順を画像付きでわかりやすくまとめました。