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

ここに表示されているのは Apigee Edge のドキュメントです。
Go to the Apigee X のドキュメントに移動します
info

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

始める前に

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

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

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

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

証明書チェーンを分割する

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

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

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

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

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

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

  1. 次の OpenSSL コマンドを実行して、チェーン内の各証明書の SubjectIssuerentity から root まで取得し、適切な証明書チェーンを形成していることを確認します:
    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 コマンドを実行して、チェーン内の各 証明書の hash シーケンスを entity から root まで取得し、適切な証明書チェーンを形成していることを確認します。
  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 は証明書の名前です。

checkend オプションによる証明書の有効期限の検証のサンプル

次のコマンドは、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 は、 証明書の有効期限がまだ切れていないことを示しています。