共用方式為


在您的應用程式程式代碼中使用TLS/SSL 憑證

這很重要

從 2025 年 7 月 28 日開始,App Service 受控憑證 (ASMC) 的變更將影響特定案例中憑證的發行和更新方式。 雖然大多數客戶不需要採取行動,但我們建議您檢閱我們的 ASMC 詳細部落格文章 以取得更多資訊。

在您的應用程式程式代碼中,您可以存取 您新增至 Azure App Service 的公開或私人憑證。 您的應用程式程式代碼可能會作為用戶端,並存取需要憑證驗證的外部服務。 它也可能需要執行密碼編譯工作。 本文說明如何在應用程式程序代碼中使用公用或私人憑證。

在程式代碼中使用憑證的方法會使用App Service 中的傳輸層安全性 (TLS) 功能,這需要您的應用程式位於基本層或更高層級。 如果您的應用程式位於免費或共享層中,您可以在 應用程式存放庫中包含憑證檔案

當您讓 App Service 管理 TLS/安全套接字層 (SSL) 憑證時,您可以個別維護憑證和應用程式程式代碼,並保護您的敏感數據。

先決條件

若要遵循這篇文章,請參閱:

尋找指紋

  1. Azure 入口網站的左窗格中,選取 [App Services><應用程式名稱>]。

  2. 在應用程式的左窗格中,選取 [ 憑證]。 然後選取 [攜帶您自己的憑證][pfx][公鑰憑證][.cer]。

  3. 尋找您想要使用的憑證,並複製指紋。

顯示複製憑證指紋的螢幕快照。

讓憑證可供存取

若要存取應用程式程式代碼中的憑證,請將其指紋新增至 WEBSITE_LOAD_CERTIFICATES 應用程式設定。 在 Azure Cloud Shell 中執行下列命令:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>

若要讓所有憑證都可供存取,請將 值設定為 *

WEBSITE_LOAD_CERTIFICATES 設定為 * 時,所有先前新增的憑證都可供應用程式代碼存取。 如果您稍後將憑證新增至應用程式,請重新啟動應用程式,讓您的應用程式能夠存取新的憑證。 如需詳細資訊,請參閱 更新或更新憑證

在 Windows 應用程式中載入憑證

應用程式 WEBSITE_LOAD_CERTIFICATES 設定可讓 Windows 證書存儲中 目前使用者\My 中的 Windows 託管應用程式存取指定的憑證。

在 C# 程式代碼中,您可以使用憑證指紋來存取憑證。 下列程式代碼會載入具有指紋 E661583E8FABEF4C0BEF694CBC41C28FB81CD870的憑證。

using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;

string certThumbprint = "E661583E8FABEF4C0BEF694CBC41C28FB81CD870";
bool validOnly = false;

using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
  certStore.Open(OpenFlags.ReadOnly);

  X509Certificate2Collection certCollection = certStore.Certificates.Find(
                              X509FindType.FindByThumbprint,
                              // Replace below with your certificate's thumbprint
                              certThumbprint,
                              validOnly);
  // Get the first cert with the thumbprint
  X509Certificate2 cert = certCollection.OfType<X509Certificate2>().FirstOrDefault();

  if (cert is null)
      throw new Exception($"Certificate with thumbprint {certThumbprint} was not found");

  // Use certificate
  Console.WriteLine(cert.FriendlyName);
  
  // Consider to call Dispose() on the certificate after it's being used, available in .NET 4.6 and later
}

在 Java 程式代碼中,您可以使用 [Windows-MY] 字段,從存放區存取憑證。 如需詳細資訊,請參閱 公鑰憑證。 下列程式代碼示範如何載入私鑰憑證:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;

...
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null); 
Certificate cert = ks.getCertificate("<subject-cn>");
PrivateKey privKey = (PrivateKey) ks.getKey("<subject-cn>", ("<password>").toCharArray());

// Use the certificate and key
...

如需不支援或提供 Windows 證書存儲支援不足的語言,請參閱 從檔案載入憑證

從檔案載入憑證

如果您需要手動載入您上傳的憑證檔案,最好是使用 檔案傳輸通訊協定安全 (FTPS) 而不是 Git 來上傳憑證。 讓敏感性資料就像私人憑證不在原始檔控制中。

即使從檔案載入憑證,Windows 上的 ASP.NET 和 ASP.NET Core 也必須存取證書存儲。 若要在 Windows .NET 應用程式中載入憑證檔案,請在 Cloud Shell 中使用下列命令載入目前的使用者設定檔:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1

在程式代碼中使用憑證的方法會使用App Service中的TLS功能,這需要您的應用程式位於基本層或更高層級。

下列 C# 範例會從應用程式中的相對路徑載入公用憑證:

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...

var cert = X509CertificateLoader.LoadCertificateFromFile("~/<relative-path-to-cert-file>");

// Use the loaded certificate

若要瞭解如何從 Node.js、PHP、Python 或 Java 中的檔案載入 TLS/SSL 憑證,請參閱個別語言或 Web 平台的檔。

在 Linux/Windows 容器中載入憑證

應用程式 WEBSITE_LOAD_CERTIFICATES 設定可讓您的 Windows 或 Linux 自定義容器(包括內建 Linux 容器)以檔案的形式存取指定的憑證。 這些檔案位於下列目錄底下:

容器平台 公開憑證 私人憑證
Windows 容器 C:\appservice\certificates\public C:\appservice\certificates\private
Linux 容器 /var/ssl/certs /var/ssl/private

憑證檔案名稱是憑證指紋。

備註

App Service 會將憑證路徑插入 Windows 容器,作為下列環境變數: WEBSITE_PRIVATE_CERTS_PATHWEBSITE_INTERMEDIATE_CERTS_PATHWEBSITE_PUBLIC_CERTS_PATHWEBSITE_ROOT_CERTS_PATH。 最好是使用環境變數來參考憑證路徑,而不是硬式編碼憑證路徑,以防未來憑證路徑變更。

此外, Windows Server Core 和 Windows Nano Server 容器 會在 中 LocalMachine\My自動將憑證載入證書存儲。 若要載入憑證,請遵循與 在 Windows 應用程式中載入憑證中顯示的相同模式。 針對以 Windows Nano 為基礎的容器,請使用檔案路徑,如 從檔案載入憑證所示。

下列 C# 程式代碼示範如何在 Linux 應用程式中載入公用憑證。

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...

var cert = X509CertificateLoader.LoadCertificateFromFile("/var/ssl/certs/<thumbprint>.der");

// Use the loaded certificate

下列 C# 程式代碼示範如何在 Linux 應用程式中載入私人憑證。

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...

var cert = X509CertificateLoader.LoadCertificateFromFile("/var/ssl/private/<thumbprint>.p12");

// Use the loaded certificate

若要瞭解如何從 Node.js、PHP、Python 或 Java 中的檔案載入 TLS/SSL 憑證,請參閱個別語言或 Web 平台的檔。

更新或續期憑證

當您更新憑證並將它新增至您的應用程式時,它會取得新的指紋,這些指紋也必須 可供存取。 其運作方式取決於您的憑證類型。

如果您手動上傳 公用私人 憑證:

  • 如果您在 中 WEBSITE_LOAD_CERTIFICATES明確列出指紋,請將新的指紋新增至應用程式設定。
  • 如果 WEBSITE_LOAD_CERTIFICATES 設定為 *,請重新啟動應用程式,讓新的憑證可供存取。

如果您在 Azure Key Vault 中更新憑證,例如使用 App Service 憑證,則當您的應用程式與更新的憑證同步處理時,來自 Key Vault 的每日同步處理會自動進行必要的更新。

  • 如果 WEBSITE_LOAD_CERTIFICATES 包含更新憑證的舊指紋,則每日同步處理會自動將舊的指紋更新為新的指紋。
  • 如果 WEBSITE_LOAD_CERTIFICATES 設定為 *,則每日同步處理可讓新的憑證自動存取。