ASP.NET Core: Sử dụng chứng chỉ TLS/SSL trong code của bạn trong App Service Azure
Trong code ứng dụng của mình, bạn có thể truy cập các chứng chỉ công khai hoặc riêng tư mà bạn thêm vào App Service. Code ứng dụng của bạn có thể đóng vai trò là ứng dụng khách và truy cập dịch vụ bên ngoài yêu cầu xác thực chứng chỉ hoặc có thể cần thực hiện các tác vụ mã hóa. Bài hướng dẫn cách thực hiện này cho biết cách sử dụng chứng chỉ công khai hoặc riêng tư trong mã ứng dụng của bạn.
Phương pháp sử dụng chứng chỉ trong mã này sử dụng chức năng TLS trong App Service, yêu cầu ứng dụng của bạn phải ở bậc Basic trở lên. Nếu ứng dụng của bạn ở bậc Free hoặc Shared, bạn có thể đưa tệp chứng chỉ vào kho lưu trữ ứng dụng của mình.
Khi cho phép App Service quản lý chứng chỉ TLS/SSL của mình, bạn có thể duy trì riêng các chứng chỉ và mã ứng dụng của mình cũng như bảo vệ dữ liệu nhạy cảm của mình.
Điều kiện tiên quyết
Để làm theo hướng dẫn cách làm này:
Tìm dấu vân tay (thumbprint)
Trong cổng Azure, từ menu bên trái, chọn App Service > <app-name>.
Từ điều hướng bên trái của ứng dụng, chọn TLS/SSL settings, sau đó chọn Private Key Certificates (.pfx) hoặc Public Key Certificates (.cer).
Tìm chứng chỉ bạn muốn sử dụng và sao chép vân tay.
Làm cho chứng chỉ có thể truy cập được
Để truy cập chứng chỉ trong mã ứng dụng của bạn, hãy thêm dấu vân tay của chứng chỉ đó vào cài đặt ứng dụng WEBSITE_LOAD_CERTIFICATES
bằng cách chạy lệnh sau trong Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>
Để làm cho tất cả các chứng chỉ của bạn có thể truy cập được, hãy đặt giá trị thành *
.
Ghi chú
Khi
WEBSITE_LOAD_CERTIFICATES
được đặt thành*
, tất cả các chứng chỉ đã thêm trước đó đều có thể truy cập được vào mã ứng dụng. Nếu bạn thêm chứng chỉ vào ứng dụng của mình sau này, hãy khởi động lại ứng dụng để làm cho chứng chỉ mới có thể truy cập được vào ứng dụng của bạn. Để biết thêm thông tin, hãy xem Khi cập nhật (gia hạn) chứng chỉ.
Tải chứng chỉ trong ứng dụng Windows
Cài đặt ứng dụng WEBSITE_LOAD_CERTIFICATES
làm cho các chứng chỉ được chỉ định có thể truy cập được vào ứng dụng được lưu trữ trên Windows của bạn trong kho lưu trữ chứng chỉ Windows, trong Current User\My.
Trong code C#, bạn truy cập chứng chỉ bằng dấu vân tay của chứng chỉ. Đoạn mã sau tải chứng chỉ có dấu vân tay 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 }
Trong code Java, bạn truy cập chứng chỉ từ cửa hàng "Windows-MY" bằng cách sử dụng trường Subject Common Name (xem Chứng chỉ khóa public). Đoạn code sau cho biết cách tải chứng chỉ khóa private:
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 ...
Đối với các ngôn ngữ không hỗ trợ hoặc cung cấp hỗ trợ không đầy đủ cho kho lưu trữ chứng chỉ Windows, hãy xem Tải chứng chỉ từ tệp.
Tải chứng chỉ từ tệp
Ví dụ: nếu bạn cần tải tệp chứng chỉ mà bạn tải lên theo cách thủ công, thì tốt hơn là tải chứng chỉ lên bằng FTPS thay vì Git. Bạn nên giữ dữ liệu nhạy cảm như chứng chỉ riêng ngoài sự kiểm soát của nguồn.
Ghi chú
ASP.NET và ASP.NET Core trên Windows phải truy cập kho chứng chỉ ngay cả khi bạn tải chứng chỉ từ một tệp. Để tải tệp chứng chỉ trong ứng dụng Windows .NET, hãy tải hồ sơ người dùng hiện tại bằng lệnh sau trong Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
Phương pháp sử dụng chứng chỉ trong mã này sử dụng chức năng TLS trong App Service, yêu cầu ứng dụng của bạn phải ở bậc Basic trở lên.
Ví dụ C# sau tải chứng chỉ public từ một đường dẫn tương đối trong ứng dụng của bạn:
using System; using System.IO; using System.Security.Cryptography.X509Certificates; ... var bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>"); var cert = new X509Certificate2(bytes); // Use the loaded certificate
Để xem cách tải chứng chỉ TLS/SSL từ một tệp trong Node.js, PHP, Python, Java hoặc Ruby, hãy xem tài liệu dành cho ngôn ngữ hoặc nền tảng web tương ứng.
Tải chứng chỉ trong bộ chứa Linux/Windows
Cài đặt ứng dụng WEBSITE_LOAD_CERTIFICATES
làm cho các chứng chỉ được chỉ định có thể truy cập được vào vùng chứa tùy chỉnh Windows hoặc Linux của bạn (bao gồm cả vùng chứa Linux tích hợp) dưới dạng tệp. Các tập tin được tìm thấy trong các thư mục sau:
Platform container | Chứng chỉ public | Chứng chỉ private |
---|---|---|
Windows container | C:\appservice\certificates\public |
C:\appservice\certificates\private |
Linux container | /var/ssl/certs |
/var/ssl/private |
Tên tệp chứng chỉ là dấu vân tay của chứng chỉ.
Ghi chú
App Service đưa các đường dẫn chứng chỉ vào các bộ chứa Windows dưới dạng các biến môi trường
WEBSITE_PRIVATE_CERTS_PATH
,WEBSITE_INTERMEDIATE_CERTS_PATH
,WEBSITE_PUBLIC_CERTS_PATH
vàWEBSITE_ROOT_CERTS_PATH
. Tốt hơn là tham chiếu đường dẫn chứng chỉ với các biến môi trường thay vì mã hóa cứng đường dẫn chứng chỉ, trong trường hợp đường dẫn chứng chỉ thay đổi trong tương lai.
Ngoài ra, container Windows Server Core tự động tải chứng chỉ vào kho lưu trữ chứng chỉ, trong LocalMachine\My. Để tải chứng chỉ, hãy làm theo mẫu tương tự như Tải chứng chỉ trong ứng dụng Windows. Đối với container dựa trên Windows Nano, hãy sử dụng các đường dẫn tệp Tải chứng chỉ trực tiếp từ tệp.
Mã C# sau đây cho biết cách tải chứng chỉ public trong ứng dụng Linux.
using System; using System.IO; using System.Security.Cryptography.X509Certificates; ... var bytes = File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der"); var cert = new X509Certificate2(bytes); // Use the loaded certificate
Mã C# sau đây cho biết cách tải chứng chỉ private trong ứng dụng Linux.
using System; using System.IO; using System.Security.Cryptography.X509Certificates; ... var bytes = File.ReadAllBytes("/var/ssl/private/<thumbprint>.p12"); var cert = new X509Certificate2(bytes); // Use the loaded certificate
Để xem cách tải chứng chỉ TLS/SSL từ một tệp trong Node.js, PHP, Python, Java hoặc Ruby, hãy xem tài liệu dành cho ngôn ngữ hoặc nền tảng web tương ứng.
Khi cập nhật (gia hạn) chứng chỉ
Khi bạn gia hạn chứng chỉ và thêm nó vào ứng dụng của mình, nó sẽ nhận được một dấu vân tay mới, dấu vân tay này cũng cần phải được truy cập. Cách nó hoạt động tùy thuộc vào loại chứng chỉ của bạn.
Nếu bạn tải chứng chỉ public hoặc private lên theo cách thủ công:
- Nếu bạn liệt kê dấu vân tay một cách rõ ràng trong
WEBSITE_LOAD_CERTIFICATES
, hãy thêm dấu vân tay mới vào cài đặt ứng dụng. - Nếu
WEBSITE_LOAD_CERTIFICATES
được đặt thành*
, hãy khởi động lại ứng dụng để có thể truy cập chứng chỉ mới.
Nếu bạn gia hạn chứng chỉ trong Key Vault, chẳng hạn như với chứng chỉ App Service, thì quá trình đồng bộ hóa hàng ngày từ Key Vault sẽ tự động thực hiện cập nhật cần thiết khi đồng bộ hóa ứng dụng của bạn với chứng chỉ đã gia hạn.
- Nếu
WEBSITE_LOAD_CERTIFICATES
chứa dấu vân tay cũ của chứng chỉ được gia hạn của bạn, thì việc đồng bộ hóa hàng ngày sẽ tự động cập nhật dấu vân tay cũ thành dấu vân tay mới. - Nếu
WEBSITE_LOAD_CERTIFICATES
được đặt thành*
, thì đồng bộ hóa hàng ngày sẽ tự động truy cập chứng chỉ mới.
Tham khảo
- Bảo mật tên DNS tùy chỉnh bằng liên kết TLS/SSL trong App Service Azure
- Thực thi HTTPS
- Thực thi TLS 1.1/1.2
- Câu hỏi thường gặp: Chứng chỉ dịch vụ ứng dụng
- Biến môi trường và tham chiếu cài đặt ứng dụng