正在驗證憑證鏈結

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

本文說明在將憑證上傳至 Apigee Edge 中的 KeyStore 或信任儲存庫之前,如何驗證憑證鏈。這個程序需要使用 OpenSSL 工具包來驗證憑證鏈,且適用於任何提供 OpenSSL 的環境。

事前準備

使用本文件中的步驟前,請務必瞭解下列主題:

  • 如果不熟悉憑證鏈,請參閱信任鏈相關說明。
  • 如果您不熟悉 OpenSSL 程式庫,請參閱 OpenSSL
  • 如要使用本指南中的指令列範例,請安裝或更新 OpenSSL 用戶端的最新版本。
  • 確認憑證為 PEM 格式。如果憑證不是 PEM 格式,請按照 將憑證轉換為支援的格式一文中的操作說明,將憑證轉換為 PEM 格式。

正在驗證完整鏈結的憑證主體和核發者

如要使用 OpenSSL 指令驗證憑證鏈結,請完成下列各節所述的步驟:

分割憑證鏈結

在驗證憑證之前,您需要先按照下列步驟將憑證鏈結分割成不同的憑證:

  1. 登入存在 OpenSSL 用戶端的伺服器。
  2. 將憑證鏈結分割成下列憑證 (如果尚未完成的話):
    • 實體憑證: entity.pem
    • 中繼憑證: intermediate.pem
    • 根憑證: root.pem

下圖顯示憑證鏈結範例:

憑證鏈結流程:將憑證中介至根憑證的識別憑證

驗證憑證主體和核發者

本節說明如何取得憑證的主體和核發者,並驗證你具備有效的憑證鏈。

  1. 執行下列 OpenSSL 指令,取得 entityroot 鏈結中每個憑證的 SubjectIssuer,並確認這些憑證會形成適當的憑證鏈:
    openssl x509 -text -in certificate | grep -E '(Subject|Issuer):'
        

    其中 certificate 是憑證的名稱。

  2. 確認鏈結中的憑證符合下列規範:
    • 每個憑證的 Subject 與鏈結中前一個憑證的 Issuer 相符 (Entity 憑證除外)。
    • 根憑證的 SubjectIssuer 相同。

    如果鏈結中的憑證符合這些規範,則憑證鏈結為完整且有效。

    憑證鏈驗證範例

    以下是含有三個憑證的範例憑證鏈結的 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 指令,從 entityroot 取得鏈結中每個憑證的 hash 序列,並確認這些憑證會形成適當的憑證鏈。
  2. openssl x509 -hash -issuer_hash -noout -in certificate
        

    其中 certificate 是憑證的名稱。

  3. 確認鏈結中的憑證符合下列規範:
    • 每個憑證的 Subject 與鏈結中前一個憑證的 Issuer 相符 (Entity 憑證除外)。
    • 根憑證的 SubjectIssuer 相同。

    如果鏈結中的憑證符合這些規範,則我們將憑證鏈視為完整且有效。

    透過雜湊序列驗證憑證鏈結的範例

    以下範例是包含三個憑證的範例憑證鏈結的 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 指令,取得鏈結中每個憑證的開始和結束日期從 entityroot,並確認鏈結中的所有憑證均已生效 (開始日期早於今天),且尚未過期。

透過開始與結束日期驗證憑證到期驗證的範例

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」訊息表示憑證尚未過期。