這很重要
自 2025 年 7 月 28 日起,App Service Managed Certificates(ASMC)的變更影響了某些情境下憑證的發行與續期方式。 雖然大多數客戶不需要採取行動,但我們建議您檢閱我們的 ASMC 詳細部落格文章 以取得更多資訊。
在您的應用程式程式碼中,您可以存取新增至 Azure App 服務 的公開金鑰憑證和包含私密金鑰的憑證。 您的應用程式程式代碼可能會作為用戶端,並存取需要憑證驗證的外部服務。 它也可能需要執行密碼編譯工作。 本文說明如何在申請碼中使用公開或私密簽署的憑證。
在程式代碼中使用憑證的方法會使用App Service 中的傳輸層安全性 (TLS) 功能,這需要您的應用程式位於基本層或更高層級。 如果您的應用程式位於免費或共享層中,您可以在 應用程式存放庫中包含憑證檔案。
當你讓 App Service 管理你的 TLS 憑證時,你可以分別維護憑證和應用程式碼,保護你的敏感資料。
先決條件
尋找指紋
登入 Azure 入口網站。
選擇你的 App Service 應用程式。
在側邊欄選單的 設定 中,選擇 憑證。
選取 [攜帶您自己的憑證][pfx] 或 [公鑰憑證][.cer]。
尋找您想要使用的憑證,並複製指紋。
讓憑證可供存取
若要存取應用程式程式代碼中的憑證,請將其指紋新增至 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 憑證存放區的 Current User\My 中存取指定的憑證,使其可供您的 Windows 託管應用程式使用。
在 C# 程式代碼中,您可以使用憑證指紋來存取憑證。 下列程式代碼會載入具有指紋 <your-cert-thumbprint>的憑證。
using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
string certThumbprint = "<your-cert-thumbprint>";
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 應用程式中載入憑證檔案,請用以下指令載入目前的使用者設定檔:
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 憑證,請參閱相關語言或網頁平台的文件。
在 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_PATH、WEBSITE_INTERMEDIATE_CERTS_PATH、WEBSITE_PUBLIC_CERTS_PATH,以及 WEBSITE_ROOT_CERTS_PATH。 最好是使用環境變數來參考憑證路徑,而不是硬式編碼憑證路徑,以防未來憑證路徑變更。
此外,Windows Server Core 與 Windows Nano Server 容器 會自動將憑證載入到憑證儲存中。 要載入憑證,請依照 Load certificates in Windows app 所示的模式。 對於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 憑證,請參閱相應語言或網頁平台的文件。
更新或續期憑證
當您更新憑證並將它新增至您的應用程式時,它會取得新的指紋,這些指紋也必須 可供存取。 其運作方式取決於您的憑證類型。
- 如果您在 中
WEBSITE_LOAD_CERTIFICATES明確列出指紋,請將新的指紋新增至應用程式設定。 - 如果
WEBSITE_LOAD_CERTIFICATES設定為*,請重新啟動應用程式,讓新的憑證可供存取。
如果你在 Azure Key Vault 續期憑證,例如 App Service 憑證,金鑰保存庫 的每日同步會在應用程式與續期憑證同步時自動進行必要的更新。
- 如果
WEBSITE_LOAD_CERTIFICATES包含更新憑證的舊指紋,則每日同步處理會自動將舊的指紋更新為新的指紋。 - 如果
WEBSITE_LOAD_CERTIFICATES設定為*,則每日同步處理可讓新的憑證自動存取。
相關內容
- 在 Azure App 服務 中為自訂網域啟用 HTTPS
- 強制使用 HTTPS
- 強制執行 TLS 1.2
FAQ:在 Azure App 服務 - 環境變數與應用程式設定參考