Helpex - Trao đổi & giúp đỡ Đăng nhập

Cấu hình HTTPS trong ASP.NET Core 2.1

Cuối cùng, HTTPS đã được đưa vào ASP.NET Core. Nó đã ở đó trước khi trở lại vào 1.1 nhưng khá khó để cấu hình. Nó có sẵn trong 2.0 bit không được cấu hình theo mặc định. Bây giờ nó là một phần của cấu hình mặc định và hiển thị và trình bày cho các nhà phát triển, những người sẽ tạo ra một dự án ASP.NET Core 2.1 mới.

Vì vậy, tiêu đề của bài đăng trên blog này khá sai lệch vì bạn không cần định cấu hình HTTPS vì nó đã được định cấu hình. Vì vậy, hãy xem cách nó được cấu hình và cách nó có thể được tùy chỉnh. Đầu tiên, tạo một ứng dụng web ASP.NET Core 2.1 mới.

Bạn đã cài đặt .NET Core SDK mới nhất chưa? Nếu không, hãy truy cập https://dot.net/ để tải xuống và cài đặt phiên bản mới nhất cho nền tảng của bạn.

Mở một giao diện điều khiển và CD đến vị trí yêu thích của bạn để chơi xung quanh với các dự án mới. Đó là C: \ git \ aspnet \ trong trường hợp của tôi.

mkdir HttpsSecureWeb && cd HttpSecureWeb
dotnet new mvc -n HttpSecureWeb -o HttpSecureWeb
dotnet run

Các lệnh này sẽ tạo và chạy một ứng dụng mới có tên là httpSecureWeb. Và bạn sẽ thấy HTTPS lần đầu tiên trong đầu ra giao diện điều khiển bằng cách chạy ứng dụng ASP.NET Core 2.1 mới được tạo:

Cấu hình HTTPS trong ASP.NET Core 2.1

Có hai URL khác nhau nơi Kestrel đang nghe: https: // localhost: 5001http: // localhost: 5000.

Nếu bạn đi đến phương thức Cấu hình trong Startup.csđó, có một số phần mềm trung gian mới được sử dụng để chuẩn bị web này sử dụng https.

Trong chế độ môi trường Sản xuất và Dàn dựng có phần mềm trung gian này:

app.UseHsts(); 

Điều này cho phép HSTS (Giao thức truyền tải nghiêm ngặt HTTP), đây là một tính năng HTTP / 2 để tránh các cuộc tấn công trung gian. Nó yêu cầu trình duyệt lưu trữ chứng chỉ cho các tiêu đề máy chủ cụ thể và trong một khoảng thời gian cụ thể. Nếu chứng chỉ thay đổi trước khi phạm vi thời gian kết thúc, có điều gì đó không ổn với trang ( Thông tin thêm về HSTS ).

Phần mềm trung gian mới tiếp theo chuyển hướng tất cả các yêu cầu không có HTTPS để sử dụng phiên bản HTTPS:

app.UseHttpsRedirection(); 

Nếu bạn gọi http: // localhost: 5000 , bạn sẽ được chuyển hướng đến https: // localhost: 5001 . Điều này có ý nghĩa nếu bạn muốn thực thi HTTPS.

Vì vậy, từ phối cảnh ASP.NET Core, mọi thứ chúng ta cần làm để chạy trang web bằng HTTPS đã được thực hiện. Thật không may, Giấy chứng nhận bị thiếu. Đối với chế độ sản xuất, bạn cần mua chứng chỉ tin cậy hợp lệ và cài đặt nó trong kho chứng chỉ Windows. Đối với chế độ phát triển, bạn có thể tạo chứng chỉ phát triển bằng Visual Studio 2017 hoặc .NET CLI. VS 2017 tự động tạo chứng chỉ cho bạn.

Sử dụng công cụ .NET CLI "dev-certs", bạn có thể quản lý các chứng chỉ phát triển của mình, như xuất chúng, làm sạch tất cả các chứng chỉ phát triển, tin tưởng vào chứng chỉ hiện tại, v.v. Chỉ cần thời gian lệnh sau để có được thông tin chi tiết hơn:

dotnet dev-certs https --help 

Trên máy của tôi, tôi đã tin tưởng chứng chỉ phát triển để không gặp phải màn hình lỗi xấu trong trình duyệt về chứng chỉ không tin cậy và kết nối không an toàn mỗi khi tôi muốn gỡ lỗi ứng dụng ASP.NET Core. Điều này hoạt động khá tốt:

dotnet dev-cert https --trust

Lệnh này tin tưởng chứng chỉ phát triển, bằng cách thêm nó vào kho lưu trữ chứng chỉ hoặc vào móc khóa trên Mac.

Trên Windows, bạn nên sử dụng kho chứng chỉ để đăng ký chứng nhận HTTPS. Đây là cách an toàn nhất trên các máy Windows. Nhưng tôi cũng thích ý tưởng lưu trữ chứng chỉ được bảo vệ bằng mật khẩu trực tiếp trong thư mục web hoặc ở đâu đó trên máy chủ web. Điều này giúp việc triển khai ứng dụng lên các nền tảng khác nhau khá dễ dàng vì Linux và Mac sử dụng các cách khác nhau để lưu trữ chứng nhận. May mắn thay, có một cách trong ASP.NET Core để tạo kết nối HTTPS bằng chứng chỉ tệp được lưu trữ trên ổ cứng. ASP.NET Core hoàn toàn tùy biến. Nếu bạn muốn thay thế việc xử lý chứng nhận mặc định, vui lòng thực hiện.

Để thay đổi cách xử lý mặc định, hãy mở  Program.cs và xem nhanh mã, đặc biệt là phương thức  CreateWebHostBuilder:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<startup>();</startup>

Phương pháp này tạo WebhostBuilder mặc định. Điều này có rất nhiều công cụ được cấu hình sẵn, đang hoạt động rất tốt trong hầu hết các kịch bản. Nhưng có thể ghi đè tất cả các cài đặt mặc định ở đây và thay thế nó bằng một số cấu hình tùy chỉnh. Chúng tôi cần thông báo cho máy chủ web Kestrel biết máy chủ và cổng nào cần nghe và chúng tôi có thể định cấu hình ListenOptions cho các cổng cụ thể. Trong phần ListOptions này, chúng ta có thể sử dụng HTTPS và chuyển vào tệp chứng chỉ và mật khẩu cho tệp đó:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options =>
        {
            options.Listen(IPAddress.Loopback, 5000);
            options.Listen(IPAddress.Loopback, 5001, listenOptions =>
            {
                listenOptions.UseHttps("certificate.pfx", "topsecret");
            });
        })
        .UseStartup<startup>();</startup>

Thông thường, chúng ta sẽ sử dụng các giá trị được mã hóa cứng từ tệp cấu hình hoặc các biến môi trường, thay vì mã hóa nó.

Hãy chắc chắn rằng chứng chỉ được bảo vệ bằng mật khẩu bằng mật khẩu dài hoặc thậm chí tốt hơn là cụm từ mật khẩu. Đảm bảo không lưu trữ mật khẩu hoặc cụm mật khẩu vào tệp cấu hình. Trong chế độ phát triển, bạn nên sử dụng các  bí mật người dùng  để lưu trữ ngày bí mật đó và trong chế độ sản xuất,  Azure Key Vault  có thể là một tùy chọn.

Phần kết luận

Tôi hy vọng điều này sẽ giúp bạn có được cái nhìn tổng quan về việc sử dụng HTTPS trong ASP.NET Core. Đây không thực sự là một cuộc lặn sâu nhưng cố gắng giải thích những gì các phần mềm trung gian mới tốt và cách cấu hình HTTPS cho các nền tảng khác nhau.

BTW: Tôi vừa thấy trong  bài đăng trên blog về các cải tiến HTTPS , về HSTS trong ASP.NET Core, có một cách để lưu cấu hình HTTPS trong launchSinstall.json. Đây là một cách dễ dàng để chuyển các biến môi trường khi khởi động vào ứng dụng. Các mẫu cũng cho thấy cách thêm mật khẩu chứng chỉ vào tệp cài đặt này. Xin đừng bao giờ làm điều này! Vì một tệp dễ dàng được chia sẻ vào kho lưu trữ mã nguồn hoặc bất kỳ cách nào khác, do đó mật khẩu bên trong cũng được chia sẻ. Vui lòng sử dụng các cơ chế khác nhau để đặt mật khẩu trong một ứng dụng, như bí mật người dùng đã được đề cập   hoặc  Azure Key Vault .

1 hữu ích 0 bình luận 4.6k xem chia sẻ

Có thể bạn quan tâm

loading