Lỗi SSL trong dịch vụ web API?

 

Các dịch vụ Web API đóng vai trò quan trọng trong việc kết nối và truyền tải dữ liệu giữa các hệ thống. Tuy nhiên, một trong những vấn đề phổ biến mà các nhà phát triển thường gặp phải là lỗi SSL (Secure Sockets Layer). Lỗi này không chỉ ảnh hưởng đến tính bảo mật mà còn có thể gây gián đoạn hoạt động của ứng dụng, làm mất đi sự tin cậy từ người dùng. Vậy lỗi SSL trong dịch vụ Web API là gì, nguyên nhân do đâu, và cách khắc phục như thế nào? Hãy cùng tìm hiểu chi tiết trong bài viết này.

1. Cách sửa lỗi SSL trong dịch vụ web API?

Cách tốt hơn hết là ta nên cài lại từ đầu để tránh gặp lỗi, và để thiết lập SSL trong IIS 7 trở lên:

  • Tạo hoặc nhận chứng chỉ. Để thử nghiệm, bạn có thể tạo chứng chỉ tự ký.
  • Thêm liên kết HTTPS.

Để kiểm tra cục bộ, bạn có thể bật SSL trong IIS Express từ Visual Studio. Trong cửa sổ Thuộc tính, đặt SSL Enabled thành True . Lưu ý giá trị của URL SSL ; sử dụng URL này để kiểm tra kết nối HTTPS.

2. Thực thi SSL trong Bộ điều khiển API Web

 

Nếu bạn có cả ràng buộc HTTPS và HTTP, khách hàng vẫn có thể sử dụng HTTP để truy cập trang web. Bạn có thể cho phép một số tài nguyên khả dụng thông qua HTTP, trong khi các tài nguyên khác yêu cầu SSL. Trong trường hợp đó, hãy sử dụng bộ lọc hành động để yêu cầu SSL cho các tài nguyên được bảo vệ. Mã sau đây hiển thị bộ lọc xác thực Web API kiểm tra SSL:

public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = “HTTPS Required”
};
}
else
{
base.OnAuthorization(actionContext);
}
}
}

Thêm bộ lọc này vào bất kỳ hành động API Web nào yêu cầu SSL:

public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { … }
}

* Chứng chỉ máy khách SSL:

Mở IIS Manager và thực hiện các bước sau:

  • Nhấp vào nút trang web trong chế độ xem cây.
  • Nhấp đúp vào tính năng Cài đặt SSL ở ngăn giữa.
  • Trong Chứng chỉ khách hàng , hãy chọn một trong các tùy chọn sau:
    • Chấp nhận : IIS sẽ chấp nhận chứng chỉ từ máy khách nhưng không yêu cầu chứng chỉ.
    • Yêu cầu : Yêu cầu chứng chỉ máy khách. (Để bật tùy chọn này, bạn cũng phải chọn “Yêu cầu SSL”)

Bạn cũng có thể thiết lập các tùy chọn này trong tệp ApplicationHost.config:

<system.webServer>
<security>
<access sslFlags=”Ssl, SslNegotiateCert” />
<!– To require a client cert: –>
<!– <access sslFlags=”Ssl, SslRequireCert” /> –>
</security>
</system.webServer>

* Tạo chứng chỉ máy khách để thử nghiệm

Đối với mục đích thử nghiệm, bạn có thể sử dụng MakeCert.exe để tạo chứng chỉ máy khách. Trước tiên, hãy tạo một quyền root thử nghiệm:

makecert.exe -n “CN=Development CA” -r -sv TempCA.pvk TempCA.cer

Tiếp theo, thêm chứng chỉ vào kho lưu trữ “Trusted Root Certification Authorities” của máy chủ thử nghiệm như sau:

  • Mở MMC.
  • Trong File , chọn Add/Remove Snap-In .
  • Trong mục Snap-in khả dụng , chọn Chứng chỉ , sau đó nhấp vào Thêm .
  • Chọn Tài khoản máy tính .
  • Chọn Máy tính cục bộ và hoàn tất trình hướng dẫn.
  • Trong ngăn điều hướng, hãy mở rộng nút “Trusted Root Certification Authorities”.
  • Trên menu Hành động , trỏ tới Tất cả tác vụ , sau đó nhấp vào Nhập để khởi động Trình hướng dẫn nhập chứng chỉ.
  • Duyệt đến tệp chứng chỉ TempCA.cer.
  • Nhấp vào Mở , sau đó nhấp vào Tiếp theo và hoàn tất trình hướng dẫn. (Bạn sẽ được nhắc nhập lại mật khẩu.)

Bây giờ hãy tạo một chứng chỉ máy khách được ký bởi chứng chỉ đầu tiên:

makecert.exe -pe -ss My -sr CurrentUser -a sha1 -sky exchange -n “CN=name”
-eku 1.3.6.1.5.5.7.3.2 -sk SignedByCA -ic TempCA.cer -iv TempCA.pvk

* Sử dụng chứng chỉ khách hàng trong Web API:

Ở phía máy chủ, bạn có thể lấy chứng chỉ máy khách bằng cách gọi GetClientCertificate trên tin nhắn yêu cầu. Phương thức trả về null nếu không có chứng chỉ máy khách. Nếu không, nó trả về một thể hiện X509Certificate2 . Sử dụng đối tượng này để lấy thông tin từ chứng chỉ, chẳng hạn như bên phát hành và chủ thể. Sau đó, bạn có thể sử dụng thông tin này để xác thực và/hoặc ủy quyền.

X509Certificate2 cert = Request.GetClientCertificate(); string issuer = cert.Issuer; string subject = cert.Subject;

 

0/5 (0 Reviews)

Leave a Comment