ASP.NET Core: Sử dụng chứng chỉ TLS/SSL trong code của bạn trong App Service Azure


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

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.

Sao chép dấu vân tay của chứng chỉ

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_PATHWEBSITE_INTERMEDIATE_CERTS_PATHWEBSITE_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

Nguồn: learn.microsoft.com
» Tiếp: Thêm và quản lý chứng chỉ TLS/SSL trong App Service Azure
« Trước: Ánh xạ tên DNS tùy chỉnh hiện có sang App Service Azure
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!