針對私有雲設定 API 的傳輸層安全標準 (TLS) 存取權

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

Edge 上的虛擬主機會定義要公開 API Proxy 的網域和通訊埠,以及 擴充功能,應用程式用來存取 API Proxy 的網址。

虛擬主機也會定義是否使用 HTTP 通訊協定存取 API Proxy,或 透過使用 TLS 的加密 HTTPS 通訊協定進行加密將虛擬主機設定為使用 HTTPS 和 TLS 會在 Edge 上建立虛擬主機,並將虛擬主機設為使用 Keystore Truststore

瞭解詳情:

,瞭解如何調查及移除這項存取權。

建立虛擬主機的必備資訊

建立虛擬主機前,您應具備下列資訊:

  • 公開的虛擬主機網域名稱。舉例來說,您應該 公開名稱是 api.myCompany.commyapi.myCompany.com 等等。 用於建立虛擬主機和為 虛擬主機
  • 針對單向傳輸層安全標準 (TLS),您必須建立 KeyStore 包含該 KeyStore 的 KeyStore 包括:
    • TLS 憑證 - 由憑證授權單位 (CA) 簽署的憑證,或 最後一個憑證由 CA 簽署的憑證鏈結。
    • 私密金鑰 - Edge 最高支援 2048 位元的金鑰大小。通關密語為選用項目。
  • 針對雙向傳輸層安全標準 (TLS),您必須具有 KeyStore,並透過信任儲存庫來 用戶端憑證,以及 (選用) 憑證的 CA 鏈結。您也需要使用信任儲存庫 該憑證是由 CA 簽署。

請參閱 KeyStore 和 Truststores,進一步瞭解建立 KeyStore 和信任儲存庫的相關資訊。

TLS 的虛擬主機設定

如要建立虛擬主機,請建立定義虛擬主機的 XML 物件。 以下 XML 物件使用 <SSLInfo> 元素定義 可透過 HTTPS 進行單向 TLS 設定的主機:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

在此範例中,<Enabled> 元素設為 true 為 啟用單向 TLS,而 <KeyStore> 和 <KeyAlias> 元素會指定 KeyStore 以及傳輸層安全標準 (TLS) 連線使用的金鑰

如要啟用雙向 TLS,請將 <ClientAuthEnabled> 元素設為 true,並指定信任儲存庫 使用 <TrustStore> 元素。信任儲存庫保存了用戶端的憑證,以及 (選用) 憑證的 CA 鏈結。

決定如何在虛擬主機中指定 KeyStore 和信任儲存庫名稱

在上方的虛擬主機範例中,您可以使用「參考資料」指定 KeyStore。A 罩杯 參照是包含 KeyStore 名稱的變數,而不是指定 KeyStore 直接名稱。

使用參照的好處是,您可以變更參考檔案的值來變更 因為目前 KeyStore 中的憑證 有幾項要求如要變更參照的值,則不必重新啟動。 以及邊緣路由器

您也可以在虛擬主機中使用文字 KeyStore 名稱。但 修改虛擬主機來變更 KeyStore 名稱,您必須重新啟動 Edge Router。

使用 KeyStore 和信任儲存庫的參照限制

使用 KeyStore 和 信任儲存庫:

  • 只有在支援 SNI 和 您將在 Apigee 路由器上終止 SSL
  • 如果在 Apigee 路由器的前方設有負載平衡器,且您在 就無法在虛擬環境中使用 KeyStore 和信任儲存庫參照 主機。

修改現有的虛擬主機以使用 KeyStore 和信任儲存庫的參照

Apigee 強烈建議虛擬主機使用 KeyStore 和信任存放區的參照。 參照可讓您變更虛擬主機使用的 KeyStore 和信任儲存庫,而不需要 便不必重新啟動 Edge Router

如果目前已設定虛擬主機使用 KeyStore 的常值名稱, 可以將其轉換為使用參照如要這麼做,請更新要使用的虛擬主機 ,然後重新啟動 Edge Router

設定 Edge 4.15.07 以下版本的 TLS 加密方式和通訊協定

如果您使用的是 Edge 4.15.07 以下版本,請設定 TLS 通訊協定和加密 透過 HTTP 負載平衡器的 <Ciphers><Protocols> 子標記 <SSLInfo> 標記。這些標記 。

例如:

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>myTestKeystore</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>false</ClientAuthEnabled>
            <KeyStore>myTestKeystore</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <Ciphers>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
            </Ciphers>
            <Protocols>
                <Protocol>TLSv1.2</Protocol>
            </Protocols>
        </SSLInfo>
   </SSLInfo>

<Cipher> 標記會使用 加密的 Java 和 JSSE 名稱。例如,若為 Java 8,請參閱 http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

為 Edge 4.16.01 至 4.16.09 指定 TLS 加密方式和通訊協定

在 Edge 4.16.01 到 4.16.09 中,您設定了虛擬主機的預設加密方式和通訊協定 位於路由器上這些預設值會套用至所有虛擬主機。

使用權杖指定預設通訊協定和加密方式:

  • 如要指定預設通訊協定,請使用 conf_load_balancing_load.balancing.driver.server.ssl.protocols 權杖
  • 如要指定路由器的預設加密方式,請使用 conf_load_balancing_load.balancing.driver.server.ssl.ciphers 權杖

conf_load_balancing_load.balancing.driver.server.ssl.protocols 權杖的預設值 為:

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

這項設定會指定路由器支援 TLS 1.0、1.1 和 1.2 版。請指定 以空格分隔的值清單。

conf_load_balancing_load.balancing.driver.server.ssl.ciphers 權杖的預設值 為:

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

這項設定可以指定:

  • 金鑰長度必須為 128 位元以上 (HIGH)。
  • 排除未經驗證的加密 (!aNULL)
  • 使用 MD5 (!MD5) 排除加密套件
  • 排除使用 DH (包括匿名 DH、臨時 DH 和固定 DH) 加密套件,以及 3DES (!DH+3DES)
  • 使用 RSA 金鑰交換和三元組 DES 排除加密套件 (!RSA+3DES)

如要瞭解這個權杖允許的語法和值,請參閱 OpenSSL 加密方式。 請注意,這個權杖使用的是 OpenSSL 加密名稱 (例如 AES128-SHA256),而非 Java/JSSE 加密名稱,例如 TLS_RSA_WITH_AES_128_CBC_SHA256。

如要設定路由器的權杖:

  1. 編輯/opt/apigee/customer/application/router.properties 檔案。如果該檔案不存在,請建立該檔案。
  2. 設定 conf_load_balancing_load.balancing.driver.server.ssl.ciphers 產生下一個符記舉例來說,如果只要指定 TLSv1.2,並排除使用預先共用金鑰的加密套件, 新增 !PSK
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
    conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
  3. 確保 router.properties 檔案的擁有者為 Apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. 重新啟動 Edge 路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. 檢查權杖的值:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

設定 Edge 4.17.01 以上版本的 TLS 虛擬主機參數

如果您使用的是 Edge 4.17.01 以上版本,可以為 個別虛擬主機,例如 TLS 通訊協定和加密方式,請採用<Properties> <VirtualHost> 標記之前。如需這些標記的說明,請參閱「虛擬主機屬性參考資料」。

例如:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">50</Property>
        <Property name="keepalive_timeout">300</Property>
        <Property name="proxy_request_buffering">off</Property>
        <Property name="proxy_buffering">off</Property>
        <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
        <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
    </Properties>
</VirtualHost>

如要瞭解 ssl_ciphers 權杖允許的語法和值,請參閱 OpenSSL 加密方式。 請注意,這個權杖使用的是 OpenSSL 加密名稱 (例如 AES128-SHA256),而非 Java/JSSE 加密方式名稱,例如 TLS_RSA_WITH_AES_128_CBC_SHA256。

建立使用 HTTPS 的虛擬主機

此範例使用參照來指定虛擬主機的 KeyStore。使用 參考資料可讓您變更 KeyStore,而無需重新啟動路由器。

請按照下列程序建立虛擬主機:

  1. 使用以下指令,建立及設定名為 myTestKeystore 的 KeyStore 本文所述程序:Keystores 和 Truststores。確保 KeyStore 使用別名名稱 憑證和私密金鑰的 myKeyAlias 欄位。
  2. 請使用下列 POST API 呼叫建立參照 命名為 keystoreref

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="keystoreref">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>'
      -u email:password
    

    參考資料將 KeyStore 名稱和參照類型指定為 KeyStore

    請使用下列 GET API 呼叫查看參考資源:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. 使用建立 Virtual Host API,其中 <ms-IP> 是 IP 位址 或網域名稱管理伺服器

    請務必指定正確的 KeyStore 參照和金鑰別名:

    curl -X POST -H "Content-Type:application/xml" \
      http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \
      -d '<VirtualHost  name="newTLSTrustStore2">
        <HostAliases>
          <HostAlias>apiTLS.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
        <OCSPStapling>off</OCSPStapling>
        <SSLInfo>
          <Enabled>true</Enabled>
          <ClientAuthEnabled>false</ClientAuthEnabled>
          <KeyStore>ref://keystoreref</KeyStore>
          <KeyAlias>myKeyAlias</KeyAlias>
        </SSLInfo>
      </VirtualHost>' \
      -u email:password
  4. 為與主機別名相符的虛擬主機建立 DNS 記錄。
  5. 如果有現有的 API Proxy,請將虛擬主機加進<HTTPConnection> ProxyEndpoint。系統會自動將虛擬主機新增至所有新的 API Proxy。

    請參閱「建立虛擬主機後更新 API Proxy」一節: 關於虛擬主機

將 API Proxy 更新為使用虛擬主機後,並為該主機建立 DNS 記錄後 別名,您可以使用 API Proxy,如下所示:

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

例如:

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

建立與修改參照 連線至 KeyStore 或信任存放區

您可以選擇設定虛擬主機,以使用對 KeyStore 的參照; 信任儲存庫使用參照的好處是您可以更新參照, 指向其他 KeyStore 或信任存放區,這樣就能更新 TLS 憑證,而不必重新啟動 路由器

例如,以下是使用 KeyStore 參照的虛擬主機:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://keystoreref</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

使用下列 POST API 呼叫來建立名為 keystoreref 的參照:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password

參考資料會指定 KeyStore 的名稱及其類型。

請使用下列 GET API 呼叫查看參考資源:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

如要稍後將參照變更為指向不同的 KeyStore,請確認別名已 相同名稱,請使用下列 PUT 呼叫:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password