Подтвердить что ты не робот

Настройка SSL на веб-API ASP.NET с самостоятельным хостингом

Я создаю Self-Host Web API. Чтобы защитить его, я изучил и внедрил эту статью, успешно создал локальный сертификат SSL, используя makecert, и моя служба прошла проверку подлинности и генерирует токены в порядке, если я использую

http://localhost/webapi/authentication/authenticate

но когда я пытаюсь получить доступ к моей службе с помощью HTTPS, я получаю следующее в Firefox:

SSL_ERROR_RX_RECORD_TOO_LONG

и по тому же запросу Fiddler показывает мне:

HTTP/1.1 502 Fiddler - дата сбоя подключения: понедельник, 26 августа 2013 г. 10:44:27 GMT Content-Type: text/html; charset = UTF-8 Подключение: закрыть Временная метка: 13: 44: 27,433

[Fiddler] Сбой подключения к локальному хосту.
Не удалось согласовать соединение HTTPS с server.fiddler.network.https > Не удалось защитить существующее соединение для localhost. Рукопожатие не удалось из-за неожиданного формата пакета.

Конфигурация моего хоста:

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

где ExtendedHttpSelfHostConfiguration взято из этого сообщения:

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);
    }
}

Что мне не хватает? Спасибо заранее!

4b9b3361

Ответ 1

В соответствии с этим сообщением в блоге я выяснил, что я должен создать сертификат SSL и назначить его конкретному порту (в моем случае - 99).

Я создал локально подписанный SSL. Затем получилось Thumbprint и ApplicationId. Используя команду CMD netsh (в системах pre Win7 есть инструмент httpcfg), я присвоил свой сертификат порту

netsh http add sslcert ipport=0.0.0.0:99 certhash=3e49906c01a774c888231e5092077d3d855a6861 appid={2d6059b2-cccb-4a83-ae08-8ce209c2c5c1}, где certhash = SSL Thumbprint, а appid = ApplicationId Я скопировал ранее.

Что он, теперь я могу сделать HTTPS-запросы!