временная ошибка не может установить sh безопасный канал для ssl / tls - PullRequest
0 голосов
/ 06 марта 2020

Мое приложение WPF (для настольных компьютеров) вызывает два типа сервисов - один сервис WCF, размещенный в нашей внутренней среде, а другой - сторонний веб-сервис.

Мое приложение использует . Net framework 4.0 . Из-за недавнего обновления windows, примененного к организации, мой сторонний веб-сервис перестал работать, и я начинаю получать эту ошибку

"System.ServiceModel.Security.SecurityNegotiationException: Could not establish secure channel for SSL/TLS with authority 'abc.net'. ---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel. "

, чтобы решить, что я добавил эту строку перед вызовом стороннего веб-сервиса.

  ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 

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

Ошибка:

"System.ServiceModel.Security.SecurityNegotiationException: Could not establish secure channel for SSL/TLS with authority 'abc.net'. ---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel."

Некоторые подробности конфигурации службы WCF:

 <bindings>
      <wsHttpBinding>
        <binding maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
----
 <serviceBehaviors>
        <behavior name="WcfServerSyncService.LocalDataCacheSyncServiceBehavior">
          <serviceMetadata httpsGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="True" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WcfServerSyncService.CustomValidator,WcfServerSyncService" />
          </serviceCredentials>
        </behavior>

 <serviceBehaviors>

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

Есть предложения?

1 Ответ

0 голосов
/ 09 марта 2020

TLS1.2 требует поддержки ОС и SDK, поэтому я предлагаю вам установить инфраструктуру Do tNet и целевую старшую версию DotNet Runtime.
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
Исходя из передового опыта обеспечения безопасности транспортного уровня, нам лучше не указывать версию TLS при вызове службы WCF, защищенной сертификатом SSL. ОС будет принимать решение о версии TLS.

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls13 | System.Net.SecurityProtocolType.Tls;

Кроме того, сторона сервера WCF, размещенная в WPF, не должна вызывать ошибку связи, которая возникает только на стороне клиента. Единственной ошибкой может быть учетная запись, на которой работает WPF, у которой нет прав доступа к сертификату. Безопасность транспортного уровня требует привязки сертификата к сервисному порту, который используется для публикации sh службы.
Наконец, поскольку сервер WCF аутентифицирует клиента с помощью пользовательской проверки, это неизбежно приведет к определенным ошибкам.
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...