2013-08-26 45 views
29

Tôi đang tạo dịch vụ API Web tự lưu trữ. Để đảm bảo điều đó, tôi đã nghiên cứu và triển khai this bài viết, tạo thành một chứng chỉ SSL địa phương sử dụng makecert và dịch vụ của tôi được chứng thực và tạo ra thẻ phạt, nếu tôi đang sử dụngĐịnh cấu hình SSL trên API Web Tự lưu trữ ASP.NET

http://localhost/webapi/authentication/authenticate 

liên kết, nhưng khi tôi cố gắng truy cập dịch vụ của tôi sử dụng HTTPS, tôi nhận được sau trên Firefox:

SSL_ERROR_RX_RECORD_TOO_LONG

và cho cùng một yêu cầu Fiddler cho tôi thấy:

HTTP/1.1 502 Fiddler - Không kết nối được Ngày: Thứ Hai, 26 tháng 8 năm 2013 10:44:27 GMT Loại nội dung: văn bản/html; charset = UTF-8 Kết nối: đóng Dấu thời gian: 13: 44: 27.433

[Fiddler] Không thể kết nối socket với localhost.
Không thể thương lượng kết nối HTTPS với server.fiddler.network.https > Không thể bảo mật kết nối hiện tại cho máy chủ cục bộ. Bắt tay thất bại do một định dạng gói tin bất ngờ ..

My cấu hình tự chủ:

private HttpSelfHostServer _server; 
    private ExtendedHttpsSelfHostConfiguration _config; 
    public const string ServiceAddress = "https://localhost/webapi"; 
    _config = new ExtendedHttpsSelfHostConfiguration(ServiceAddress); 
    _server = new HttpSelfHostServer(_config); 
    _server.OpenAsync(); 

nơi ExtendedHttpSelfHostConfiguration lấy từ this post là:

public class ExtendedHttpSelfHostConfiguration : HttpSelfHostConfiguration 
{ 
    public ExtendedHttpSelfHostConfiguration(string baseAddress) : base(baseAddress) { } 
    public ExtendedHttpSelfHostConfiguration(Uri baseAddress) : base(baseAddress) { } 

    protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding) 
    { 
     if (BaseAddress.ToString().ToLower().Contains("https://")) 
     { 
      httpBinding.Security.Mode = HttpBindingSecurityMode.Transport; 
     } 

     return base.OnConfigureBinding(httpBinding); 
    } 
} 

Những gì tôi đang mất tích ? Cảm ơn bạn trước!

+0

Có thể vì http://stackoverflow.com/questions/18442542/ssl-error-rx-record-too-long-on-self-hosted-asp-net-web-api? – I4V

+2

Tốt, hãy liên kết tới bài đăng ** đã xóa ** của riêng tôi .. –

+0

Để thu hút thêm bạn đã hỏi ** cùng ** và xóa ảnh cũ. – I4V

Trả lời

27

Theo this blog post Tôi đã tìm ra, rằng tôi nên tạo chứng chỉ SSL và gán nó cho cổng cụ thể (: 99 trong trường hợp của tôi).

Tôi đã tạo SSL được ký cục bộ. Sau đó, nhận được Dấu vân tayApplicationId. Sử dụng lệnh CMD netsh (trong các hệ thống Win7 trước đó là một công cụ httpcfg), tôi đã giao giấy chứng nhận của tôi vào cổng

netsh http add sslcert ipport=0.0.0.0:99 certhash=3e49906c01a774c888231e5092077d3d855a6861 appid={2d6059b2-cccb-4a83-ae08-8ce209c2c5c1}, nơi certhash = SSL Thumbprint và APPID = ApplicationId tôi đã được sao chép trước đó.

Vậy đó, bây giờ tôi có thể thực hiện các yêu cầu HTTPS!

+28

Bạn có câu hỏi hay ở đây và câu trả lời hữu ích, nhưng giá trị của nó phụ thuộc hoàn toàn vào liên kết sang tài nguyên bên ngoài. Bạn có thể muốn chỉnh sửa câu trả lời của mình và thêm danh sách các bước cụ thể cho API Web mà bạn đã thực hiện để làm việc này. Điều này sẽ nâng cao giá trị của câu trả lời của bạn cho người khác trong trường hợp siêu liên kết "rots". – dasblinkenlight