Khi mã hóa app.config không chạy được từ máy khác năm 2024

Trong phát triển ứng dụng .NET (dotnet), việc bảo mật file appsettings.json là một mối quan tâm hàng đầu để ngăn chặn sự truy cập trái phép và bảo vệ thông tin nhạy cảm như chuỗi kết nối cơ sở dữ liệu và các cấu hình quan trọng khác khỏi những mối đe dọa tiềm ẩn.

Mục lục:


Để đảm bảo an toàn tối đa, việc sử dụng Kizuna - một công cụ mã hoá dữ liệu mạnh mẽ - là một phương pháp hiệu quả để mã hoá và bảo vệ file appsettings.json trước các cuộc tấn công và xâm nhập từ bên ngoài.

Chúng ta sẽ tiến hành mã hoá bằng các bước sau:

1️⃣ Tạo file thiết lập mới với tên settings.Production.json

Chúng ta sẽ tự định nghĩa một file mới, file này sẽ chứa toàn bộ những cấu hình cần được bảo mật.

Khi mã hóa app.config không chạy được từ máy khác năm 2024

Lưu ý: các bạn nên bổ sung file này vào file .gitignore để tránh push lên trên git nhé.

2️⃣ Cài đặt dotnet tool Kizuna

Các bạn mở terminal lên và chạy lệnh

dotnet tool install -g Kizuna

Đây là kết quả khi chúng ta đã cài thành công:

Khi mã hóa app.config không chạy được từ máy khác năm 2024

3️⃣ Tạo key bảo mật

Chạy tiếp câu lệnh phía dưới vào terminal nhé

kizuna generate

Vì kizuna cần dotnet core 3.1 runtime để chạy, nên nếu lần đầu tạo key các bạn sẽ gặp thông báo như hình:

Khi mã hóa app.config không chạy được từ máy khác năm 2024

Các bạn bấm vào link phía dưới cùng rồi tải dotnet core 3.1 runtime theo hệ điều hành của bạn.

Sau khi cài xong thì các bạn chạy lại lệnh generate nhé, kết quả là kizuna sẽ cho chúng ta một chuỗi mã, nhớ lưu chuỗi này lại để sau này dùng nó vào việc giải mã và chỉnh sửa lại file.

Khi mã hóa app.config không chạy được từ máy khác năm 2024

Kết quả: key mình vừa tạo được là: qf8f7pR5na0wCjYlh72Niz8BKLtpNICbJRothxrGtdk=

4️⃣ Thêm key vào biến môi trường

Khi ứng dụng dotnet khởi chạy cần key để giải mã file cấu hình đã được mã hoá, do dó chúng ta cần thêm key vào biến môi trường để ứng dụng có thể truy cập.

Ở hệ điều hành windows, các bạn chạy lệnh sau trong PowerShell:

[System.Environment]::SetEnvironmentVariable("MY_SECRET_KEY", "qf8f7pR5na0wCjYlh72Niz8BKLtpNICbJRothxrGtdk=", [System.EnvironmentVariableTarget]::User)

Trong đó “MY_SECRET_KEY” là tên của biến, bạn có thể đặt tuỳ ý, còn qf8f7pR5na0wCjYlh72Niz8BKLtpNICbJRothxrGtdk= là key của bạn vừa tạo

Bạn hãy tắt PowerShell và mở lại, sau đó chạy lệnh này để kiểm tra xem key của bạn đã được lưu chưa:

 echo $env:MY_SECRET_KEY

Khi PowerShell trả ra đoạn key đồng nghĩa với việc bạn đã lưu biến môi trường thành công.

Khi mã hóa app.config không chạy được từ máy khác năm 2024

5️⃣ Thực hiện mã hoá file cấu hình

Khi đã hoàn thành các bước trên mà không gặp trở ngại nào, đã đến lúc các bạn tiến hành mã hoá file của dự án.

Các bạn mở dự án bằng Visual Studio 2022 hoặc Visual Studio Code đều được, sau đó mở terminal bên trong IDE lên, hoặc các bạn cũng có thể mở terminal lên sau đó trỏ đến thư mục dự án.

Chạy lệnh sau để tiến hành mã hoá:

kizuna encrypt settings.Production.json -k $env:MY_SECRET_KEY

Lưu ý: đoạn này chỉ chạy trên PowerShell nhé, mình sẽ làm hướng dẫn ở hệ điều hành khác sau.

Khi mã hóa app.config không chạy được từ máy khác năm 2024

Chạy lệnh xong thì file của chúng ta đã được mã hoá thành một chuỗi khó hiểu như hình.

6️⃣ Chỉnh sửa file Program.cs

Đã đến lúc thiết lập cho ứng dụng của bạn đọc file mã hoá rồi.

Dự án của bạn cần cài Package

kizuna generate

1

Các bạn chạy lệnh:

dotnet add package Miqo.EncryptedJsonConfiguration

Sau đó các bạn vào file Program.cs để thêm cấu hình

Ban đầu file của các bạn sẽ tương tự thế này:

Khi mã hóa app.config không chạy được từ máy khác năm 2024

Các bạn copy đoạn sau và để ở đầu file

using Miqo.EncryptedJsonConfiguration;
var _keyName = "MY_SECRET_KEY"; // tên biến môi trường
var _keyFromUserEnv = Environment.GetEnvironmentVariable(_keyName, EnvironmentVariableTarget.User); // biến môi trường của user
var _keyFromMachineEnv = Environment.GetEnvironmentVariable(_keyName, EnvironmentVariableTarget.Machine); // biến môi trường của máy
var _keyFromProcessEnv = Environment.GetEnvironmentVariable(_keyName, EnvironmentVariableTarget.Process); // biến môi trường của process
var key = Convert.FromBase64String(_keyFromUserEnv ?? _keyFromMachineEnv ?? _keyFromProcessEnv); // thử tìm key theo thứ tự user -> machine -> process
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
if (builder.Environment.IsDevelopment()) // môi trường dev
{
    builder.Configuration.AddEncryptedJsonFile("settings.Development.json", key);
}
else // môi trường production
{
    builder.Configuration.AddEncryptedJsonFile("settings.Production.json", key);
}
ConfigurationManager _Configuration = builder.Configuration;

Vậy là chúng ta đã xong, từ giờ các bạn đã có thể thiết lập cấu hình như bình thường, khi ứng dụng khởi chạy, nó sẽ tự tìm key và giải mã file của chúng ta.

Khi mã hóa app.config không chạy được từ máy khác năm 2024

7️⃣ Giải mã file để chỉnh sửa thông tin

Ngược lại với

kizuna generate

2 là

kizuna generate

3 , các bạn dùng lệnh sau để giải mã.

kizuna decrypt settings.Production.json -k $env:MY_SECRET_KEY

Sau khi giải mã xong thì mã hoá lại bằng lệnh encrypt là được nhé.


Vậy là mình đã hướng dẫn xong cách mã hoá file cấu hình cho dotnet 6, mình nghĩ các phiên bản mới hơn cũng có thể làm tương tự, khi nào mình có cơ hội làm việc với các phiên bản khác mình sẽ hướng dẫn thêm nếu cách này không phù hợp.