共用方式為


Azure 容器應用程式中具有 TLS/SSL 的自訂網域

附註

基本標準和企業方案於 2025 年 3 月 17 日進入淘汰期。 如需詳細資訊,請參閱 Azure Spring 應用程式淘汰公告

本文適用於:✅ 基本/標準 ✅ 企業

將具有 TLS/SSL 的自訂網域從 Azure Spring Apps 移轉至 Azure 容器應用程式涉及幾個步驟,以確保順利轉換。 本文將逐步引導您完成此流程,涵蓋用戶端流量、應用程式間流量,以及傳送到外部服務的流量。

先決條件

用戶端傳送到應用程式的流量

根據預設,容器應用程式中的所有輸入流量都會使用 HTTPS,除非您手動啟用 HTTP 流量,您可以使用下列命令來執行此動作:

az containerapp ingress update \
    --resource-group "my-resource-group" \
    --name "my-app" \
    --allow-insecure

如需為應用程式設定輸入的詳細資訊,請參閱在 Azure 容器應用程式中為應用程式設定輸入 (英文)。

自訂網域

若要保護 Azure 容器應用程式中的自訂網域名稱系統 (DNS) 名稱,您可以新增數位安全性憑證。 這可支援您的應用程式之間的安全通訊。

如果您需要在 Azure 容器應用程式中保護您的自訂網域,您可以使用免費且易於使用的私人憑證。 如需詳細資訊,請參閱 Azure 容器應用程式中的自訂網域名稱和免費受控憑證

如果您有儲存在本機的私人憑證,您可以上傳它。 如需詳細資訊,請參閱 Azure 容器應用程式中的自訂網域名稱和攜帶您自己的憑證

如果您的憑證來自 Azure Key Vault,您可以直接將憑證匯入 Azure Container Apps。 如需詳細資訊,請參閱 將憑證從 Azure Key Vault 匯入至 Azure Container Apps

如果要繼續使用 Azure Spring Apps 中的原始憑證和網域名稱,您可以將憑證上傳至容器應用程式或 Azure Key Vault。 此外,您還可以更新 DNS 提供者中的 A 記錄或 CNAME,以將原始網域名稱重新導向至容器應用程式 IP 或 URL。

在用戶端和容器應用程式之間啟用 mTLS

若要在用戶端和容器應用程式之間啟用相互 TLS (mTLS),請使用下列步驟:

  1. 使用下列命令來匯出 YAML 格式的容器應用程式組態:

    az containerapp show \
        --resource-group "my-resource-group" \
        --name "my-app" \
        --output yaml > app.yaml
    
  2. 更新 clientCertificateMode 中的 值,如下列範例所示:

    properties:
      configuration:
        ingress:
          clientCertificateMode: require
    

    您可以將此屬性設定為下列其中一個值:

    • require:容器應用程式的所有要求都需要用戶端憑證。
    • accept:用戶端憑證是選擇性的。 如果未提供用戶端憑證,仍會接受要求。
    • ignore:忽略用戶端憑證。
  3. 使用下列命令將 clientCertificateMode 變更套用至容器應用程式:

    az containerapp update \
        --resource-group "my-resource-group" \
        --name "my-app" \
        --yaml app.yaml
    

如需詳細資訊,請參閱 在 Azure 容器應用程式中設定用戶端憑證驗證 (英文)。

您需要在程式碼中處理用戶端憑證驗證。

應用程式間的流量

根據預設,相同環境中容器應用程式之間的流量會使用 HTTP。 若要保護此流量,請使用下列命令啟用點對點加密:

# enable when creating the container app
az containerapp env create \
    --resource-group "my-resource-group" \
    --name "my-app" \
    --location "location" \
    --enable-peer-to-peer-encryption

# enable for the existing container app
az containerapp env update \
    --resource-group "my-resource-group" \
    --name "my-app" \
    --enable-peer-to-peer-encryption

啟用之後,Azure 容器應用程式會透過其內建的透明 Proxy 功能自動保護 HTTP 流量。 您的應用程式通常不需要關心流量是否加密。

如果您想要使用 HTTPS 進行應用程式內部之間的通訊,則必須處理憑證驗證。 這是因為網域名稱可能與憑證的通用名稱 (CN) 或使用者替代名稱 (SAN) 不符。

如需詳細資訊,請參閱在 Azure Container Apps 環境中設定輸入對等加密一節。

傳送到外部服務的流量

此範例示範如何使用spring-cloud-azure-starter-keyvault-jca函式庫,從 Azure Key Vault 載入憑證,以啟用外部服務流量的 TLS 和 mTLS。 您的 Java 項目必須使用 Spring Boot 3.1+ ,並在 您的pom.xml 檔案中包含下列相依性:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-jca</artifactId>
    <version>5.23.0</version>
</dependency>

使用 SSL 套件組合從 Key Vault 將憑證載入信任存放區

使用下列步驟,使用 spring-cloud-azure-starter-keyvault-jca 連結庫從 Azure Key Vault 將憑證載入信任存放區:

  1. 在 Azure Key Vault 中產生或匯入憑證。 如需詳細資訊,請參閱 在 Azure Key Vault 中建立和匯入憑證

  2. 在您的容器應用程式中啟用受控識別。 若要在容器應用程式中啟用受控識別,請參閱 Azure 容器應用程式中的受控識別 (英文)。

  3. Key Vault Certificate User 角色授與 Key Vault 中的受控識別。 如需詳細資訊,請參閱個別金鑰、秘密和憑證角色指派的最佳做法

  4. 將下列組態新增至 您的application.yml 檔案:

    spring:
      ssl:
        bundle:
          keyvault:
            tlsClientBundle:
              truststore:
                keyvault-ref: keyvault1
    cloud:
      azure:
        keyvault:
          jca:
            vaults:
              keyvault1:
                endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_01}
                credential:
                  client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID}  # Required for user-assigned managed identity
                  managed-identity-enabled: true
    
  5. 若要套用 Key Vault SSL 套件組合,請更新RestTemplateWebClient Bean 組態,如下列範例所示:

    // For RestTemplate
    @Bean
    RestTemplate restTemplateWithTLS(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) {
      return restTemplateBuilder.sslBundle(sslBundles.getBundle("tlsClientBundle")).build();
    }
    
    // For WebClient
    @Bean
    WebClient webClientWithTLS(WebClientSsl ssl) {
      return WebClient.builder().apply(ssl.fromBundle("tlsClientBundle")).build();
    }
    

啟用 mTLS 通訊

使用下列步驟來設定 mTLS 以進行客戶端與伺服器之間的雙向驗證:

  1. 產生或匯入客戶端和伺服器憑證至 Azure Key Vault。 如需詳細資訊,請參閱 在 Azure Key Vault 中建立和匯入憑證

  2. 為您的容器應用程式啟用受控識別。 若要在容器應用程式中啟用受控識別,請參閱 Azure 容器應用程式中的受控識別 (英文)。

  3. Key Vault Certificate User 角色授與兩個金鑰保存庫的受控識別。 如需詳細資訊,請參閱個別金鑰、秘密和憑證角色指派的最佳做法

  4. 將下列組態新增至 mTLS application.yml 檔案:

    spring:
      ssl:
        bundle:
          keyvault:
            mtlsClientBundle:
              key:
                alias: client
              for-client-auth: true
              keystore:
                keyvault-ref: keyvault2
              truststore:
                keyvault-ref: keyvault1
    cloud:
      azure:
        keyvault:
          jca:
            vaults:
              keyvault1:
                endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_01}
                credential:
                  client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID}  # Required for user-assigned managed identity
                  managed-identity-enabled: true
              keyvault2:
                endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_02}
                credential:
                  client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID}  # Required for user-assigned managed identity
                  managed-identity-enabled: true
    
  5. 若要套用 Key Vault SSL 套件組合,請更新RestTemplateWebClient Bean 組態,如下列範例所示:

    // For RestTemplate
    @Bean
    RestTemplate restTemplateWithMTLS(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) {
      return restTemplateBuilder.sslBundle(sslBundles.getBundle("mtlsClientBundle")).build();
    }
    
    // For WebClient
    @Bean
    WebClient webClientWithMTLS(WebClientSsl ssl) {
      return WebClient.builder().apply(ssl.fromBundle("mtlsClientBundle")).build();
    }
    

如需在 Spring Boot 應用程式中使用連結 spring-cloud-azure-starter-keyvault-jca 庫的詳細資訊,請參閱 Spring Cloud Azure 入門密鑰保存庫 JCA 簡介:適用於 Spring Boot 的簡化 TLS 和 mTLS

透過遵循這些步驟,您可以順利地將具有 TLS/SSL 的自訂網域從 Azure Spring Apps 移轉到 Azure 容器應用程式,以在所有流量類型中保持安全且有效率的通訊。