証明書チェーンを検証する

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

このドキュメントでは、Apigee Edge のキーストアまたはトラストストアに証明書をアップロードする前に、証明書チェーンを検証する方法について説明します。このプロセスは、OpenSSL ツールキットを使用して証明書チェーンを検証するもので、OpenSSL が利用可能なすべての環境に適用できます。

始める前に

このドキュメントの手順を行う前に、次のトピックを理解しておいてください。

  • 証明書チェーンについて詳しくは、信頼チェーンをご覧ください。
  • OpenSSL ライブラリを使い慣れていない方は、OpenSSL をご確認ください。
  • このガイドのコマンドラインの例を使用する場合は、OpenSSL クライアントの最新バージョンをインストールするか、最新バージョンに更新してください。
  • 証明書が PEM 形式であることを確認します。証明書が PEM 形式でない場合は、 サポートされている形式への証明書の変換の手順に沿って、PEM 形式に変換してください。

チェーン全体の証明書のサブジェクトと発行元を検証する

OpenSSL コマンドを使用して証明書チェーンを検証するには、次のセクションで説明する手順を完了します。

証明書チェーンの分割

証明書を検証する前に、次の手順で証明書チェーンを別々の証明書に分割する必要があります。

  1. OpenSSL クライアントが存在するサーバーにログインします。
  2. 証明書チェーンを次の証明書に分割します(まだ行っていない場合)。
    • エンティティ証明書: entity.pem
    • 中間証明書: intermediate.pem
    • ルート証明書: root.pem

次の図は、証明書チェーンの例を示しています。

証明書チェーンのフロー: ID 証明書からルート証明書への中間証明書

証明書のサブジェクトと発行元の確認

このセクションでは、証明書のサブジェクトと発行元を取得し、有効な証明書チェーンがあることを確認する方法について説明します。

  1. 次の OpenSSL コマンドを実行して、entity から root までのチェーン内の各証明書の SubjectIssuer を取得し、正しい証明書チェーンを形成していることを確認します。
    openssl x509 -text -in certificate | grep -E '(Subject|Issuer):'
        

    ここで、certificate は証明書の名前です。

  2. チェーン内の証明書が次のガイドラインを遵守していることを確認します。
    • 各証明書の Subject が、チェーン内の前の証明書の Issuer と一致します(Entity 証明書を除く)。
    • ルート証明書の SubjectIssuer は同じです。

    チェーン内の証明書がこれらのガイドラインを遵守している場合、証明書チェーンは完全かつ有効とみなされます。

    証明書チェーンの検証の例

    次の例は、3 つの証明書を含む証明書チェーンのサンプルに対する OpenSSL コマンドの出力です。

    エンティティ証明書

    openssl x509 -text -in entity.pem | grep -E '(Subject|Issuer):'
    
    Issuer: C = US, O = Google Trust Services, CN = GTS CA 1O1
    Subject: C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.enterprise.apigee.com
            

    中間証明書

    openssl x509 -text -in intermediate.pem  | grep -E '(Subject|Issuer):'
    
    Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    Subject: C = US, O = Google Trust Services, CN = GTS CA 1O1
            

    ルート証明書

    openssl x509 -text -in root.pem | grep -E '(Subject|Issuer):'
    
    Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    Subject: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
            

    上記の例では、次の点に注意してください。

    • 中間証明書の Subject がエンティティ証明書の Issuer と一致します。
    • ルート証明書の Subject が中間証明書の Issuer と一致します。
    • ルート証明書の SubjectIssuer は同じです。

    上記の例から、サンプル証明書チェーンが有効であることを確認できます。

証明書のサブジェクトと発行元ハッシュの検証

このセクションでは、証明書のサブジェクトと発行元のハッシュを取得し、有効な証明書チェーンがあることを確認する方法について説明します。

証明書のハッシュ シーケンスは、証明書の共通名(CN)に不要なスペースや特殊文字が含まれているなどの問題を特定しやすくなるため、常に確認することをおすすめします。

  1. 次の OpenSSL コマンドを実行して、entity から root までのチェーン内の各証明書の hash シーケンスを取得し、正しい証明書チェーンを形成していることを確認します。
  2. openssl x509 -hash -issuer_hash -noout -in certificate
        

    ここで、certificate は証明書の名前です。

  3. チェーン内の証明書が次のガイドラインを遵守していることを確認します。
    • 各証明書の Subject が、チェーン内の前の証明書の Issuer と一致します(Entity 証明書を除く)。
    • ルート証明書の SubjectIssuer は同じです。

    チェーン内の証明書がこれらのガイドラインを遵守している場合、証明書チェーンは完全かつ有効とみなされます。

    ハッシュ シーケンスによる証明書チェーン検証の例

    次の例は、3 つの証明書を含む証明書チェーンのサンプルに対する OpenSSL コマンドの出力です。

    openssl x509 -in entity.pem -hash -issuer_hash -noout
    c54c66ba #this is subject hash
    99bdd351 #this is issuer hash
        
    openssl x509 -in intermediate.pem -hash -issuer_hash -noout
    99bdd351
    4a6481c9
        
    openssl x509 -in root.pem -hash -issuer_hash -noout
    4a6481c9
    4a6481c9
        

    上記の例では、次の点に注意してください。

    • 中間証明書の subject hash がエンティティ証明書の issuer hash と一致します。
    • ルート証明書の subject hash が発行元証明書の issuer hash と一致します。
    • ルート証明書の subjectissuer hash は同じです。

    上記の例から、サンプル証明書チェーンが有効であることを確認できます。

証明書の有効期限を確認する

このセクションでは、チェーン内のすべての証明書が期限切れになっているかどうかを、次の方法で確認する方法について説明します。

  • 証明書の開始日と終了日を取得します。
  • 有効期限のステータスを取得します。

開始日と終了日

次の OpenSSL コマンドを実行して、entity から root までのチェーン内の各証明書の開始日と終了日を取得し、チェーン内のすべての証明書が有効であり(開始日が本日より前)、期限切れになっていないことを確認します。

開始日と終了日までの証明書の有効期限の検証の例

openssl x509 -startdate -enddate -noout -in entity.pem
notBefore=Feb  6 21:57:21 2020 GMT
notAfter=Feb  4 21:57:21 2021 GMT
openssl x509 -startdate -enddate -noout -in intermediate.pem
notBefore=Jun 15 00:00:42 2017 GMT
notAfter=Dec 15 00:00:42 2021 GMT
openssl x509 -startdate -enddate -noout -in root.pem
notBefore=Apr 13 10:00:00 2011 GMT
notAfter=Apr 13 10:00:00 2022 GMT

有効期限ステータス

次の OpenSSL コマンドを実行して、証明書がすでに期限切れになっているか、次の N seconds に期限切れになるかを確認します。現在のシステム日付のコンテキストで証明書の有効期限ステータスを返します。

openssl x509 -checkend <N Seconds> -noout -in certificate

ここで、certificate は証明書の名前です。

チェックエンド オプションを使用した証明書の有効期限検証の例

次のコマンドは、0 seconds を使用して、証明書が期限切れになっているかどうかを確認します。

openssl x509 -checkend 0 -noout -in entity.pem
Certificate will not expire
openssl x509 -checkend 0 -noout -in intermediate.pem
Certificate will not expire
openssl x509 -checkend 0 -noout -in root.pem
Certificate will not expire

この例では、メッセージ Certificate will not expire は、証明書がまだ有効期限が切れていないことを示しています。