Mục lục:
1️⃣ Tạo file thiết lập mới với tên settings.Production.json2️⃣ Cài đặt dotnet tool Kizuna3️⃣ Tạo key bảo mật4️⃣ Thêm key vào biến môi trường5️⃣ Thực hiện mã hoá file cấu hình6️⃣ Chỉnh sửa file Program.cs7️⃣ Giải mã file để chỉnh sửa thông tin
Để đả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.

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:

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:

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.

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ạoBạ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.

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.

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
Miqo.EncryptedJsonConfiguration
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:

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.

7️⃣ Giải mã file để chỉnh sửa thông tin
Ngược lại với
encrypt
là decrypt
, 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.
Cảm ơn các bạn đã đọc đến đây và chúc các bạn mã hoá thành công cho dự án nhé.