Сбои SSL периодически вызваны сертификатом сервера сертификатов, неправильно настроенным с HTTP.SYS - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь установить службу WCF для собственного хоста на сервере с Windows Server 2012. Я выполнял следующие действия:

  1. импорт моего файла pfx с помощью mmc
  2. run "netsh http add sslcert ipport = 0.0.0.0: 49000 certhash = e09280ded2322eb858b38b3250e1a488f797b269 appid = {4dc3e181-e14b-4a21-b022-59fc669b0914}" 1000 ** start 1001 1001 1001 1008 ** 1001 1001 1001 1001 1001 1001 1008 1008 1008это

Сначала это работает хорошо.Но через несколько часов ssl вылетает, и я могу только получить сообщение об ошибке на клиенте, как показано ниже

Необработанное исключение типа 'System.ServiceModel.CommunicationException' произошло в mscorlib.dll.Дополнительная информация: Произошла ошибка при отправке HTTP-запроса на https://servername:49000/WCFServiceName. Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS.Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

запустите "netsh http delete sslcert ipport = 0.0.0.0: 49000" и удалите импортированный pfx, а затем повторитешаги 1 и 2 могут заставить ssl работать снова, но проблема все равно появится через несколько часов.

Это определенно не проблема SecurityProtocol, поскольку я уже пытался добавить

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

перед запросом,И сервер, и клиент используют .Net Framework 4.5.2

Я попробовал "netsh http show sslcert" и получил следующий результат:

    IP:port                      : 0.0.0.0:49000
    Certificate Hash             : e09280ded2322eb858b38b3250e1a488f797b269
    Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
    Certificate Store Name       : My
    Verify Client Certificate Revocation : Enabled
    Verify Revocation Using Cached Client Certificate Only : Disabled
    Usage Check                  : Enabled
    Revocation Freshness Time    : 0
    URL Retrieval Timeout        : 0
    Ctl Identifier               : (null)
    Ctl Store Name               : (null)
    DS Mapper Usage              : Disabled
    Negotiate Client Certificate : Disabled

Я попытался удалить sslcertпривязка к порту 49000 и создала пустую привязку веб-сайта к порту 49000 в IIS, и тогда мой сервис прослушивает этот порт.Он работает в первый раз и длился около недели, прежде чем выскакивает та же ошибка.

Где мне начать искать и решить эту проблему?

1 Ответ

0 голосов
/ 27 мая 2019

Во-первых, мы должны убедиться, что WCF может получить доступ к закрытому ключу сертификата. Учетная запись сетевой службы (или учетная запись «Все») должна быть добавлена ​​в группу READ / Writer сертификата, после чего мы запускаем приложение (служба Windows или консоль?) С соответствующей учетной записью.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-make-x-509-certificates-accessible-to-wcf
Во-вторых, как вы знаете, версия TLS требует поддержки ОС и Dotnetframework, версия протокола по умолчанию - ssl3.0 / tls1.0 (автосогласование не может быть настроено). Нам лучше использовать последнюю версию ОС и .netframework4.7. Я думаю, что это может быть причиной нестабильной связи.
Пожалуйста, обратитесь к документу ниже.
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
Не стесняйтесь, дайте мне знать, если проблема все еще существует.

...