Использование локальных сертификатов IIS - PullRequest
0 голосов
/ 05 октября 2018

Я разработал службу веб-API, которая отправляет запрос от другого веб-API, для которого требуется личный сертификат.

Когда я разрабатывал эту службу на своем локальном ПК, я просто использовал HttpClient следующим образом:

_handler = new HttpClientHandler() 
{ ClientCertificateOptions = ClientCertificateOption.Automatic };
_client = new HttpClient(_handler);

И мой персональный сертификат был взят с моего ПК.

Затем я захотел опубликовать свой проект в IIS 8 на Windows Server 2012 R2.

Сначала я установил все сертификаты на сервере и настроил пул приложений в IIS, IIS запускается пользователем службы, но мое приложение API использует пул моей учетной записи (сертификат привязан к нему).Но когда я пытаюсь сделать запрос, я получаю следующее исключение:

<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>An error occurred while sending the request.</ExceptionMessage>
<ExceptionType>System.Net.Http.HttpRequestException</ExceptionType>
<StackTrace/>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
</ExceptionMessage>
<ExceptionType>System.Net.WebException</ExceptionType>
<StackTrace>
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
</StackTrace>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The remote certificate is invalid according to the validation procedure.
</ExceptionMessage>
<ExceptionType>
System.Security.Authentication.AuthenticationException
</ExceptionType>
<StackTrace>
at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
</StackTrace>
</InnerException>
</InnerException>
</InnerException>

Я думаю, что моя проблема в том, что IIS не может использовать сертификаты, которые я установил на Windows Server.

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Используйте это перед звонком в HttpClient.Помните, что этот код предназначен только для машин разработки.НЕ используйте это в производстве

ServicePointManager.ServerCertificateValidationCallback =
        delegate (
            object s,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        ) {
            return true;
        };
0 голосов
/ 05 октября 2018

Сертификат должен прежде всего быть доверенным, также иногда может возникнуть проблема с доступом к чтению сертификата.убедитесь, что IIS_IUSERS (пользователь пула приложений) имеет доступ на чтение:

CertificateAccess

Лучшим решением может быть создание реального сертификата (не подписанного), особенно еслиэто общедоступный API.

Они больше не стоят денег, с такими сервисами, как Let's Encrypt и инструментами для IIS, такими как win-acme (прежний let-encrypt-win-просто) он генерирует для вас сертификаты для всех привязок в вашем IIS, но также имеет много других опций.

...