BinaryMessageEncoding с HTTPSTransport - PullRequest
       0

BinaryMessageEncoding с HTTPSTransport

1 голос
/ 09 марта 2012

На самом деле у меня проблемы с реализацией как HTTPS, так и сжатия в одной и той же веб-службе WCF, но эту проблему проще объяснить с помощью BinaryMessageEncoding, и причина, вероятно, та же.

Я настроил и службу, и клиента следующим образом:

<customBinding>
  <binding name="OwnBinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
    <binaryMessageEncoding>
      <readerQuotas maxDepth="999999999" maxStringContentLength="999999999" maxArrayLength="999999999" maxBytesPerRead="999999999" maxNameTableCharCount="999999999" />
    </binaryMessageEncoding>
    <httpsTransport maxBufferSize="999999999" maxReceivedMessageSize="999999999" authenticationScheme="Anonymous" proxyAuthenticationScheme="Anonymous" useDefaultWebProxy="true"/>
  </binding>
</customBinding>

Но он продолжает давать мне следующее сообщениеException:

Произошла ошибка при отправке HTTP-запроса на https://localhost:8036/Services/FileService. Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

InnerException: {"Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка."}

Я знаю, это говорит о том, что это из-за недействительного сертификата, и я пробовал это также с этой уловкой , но она все еще не работает. (У меня нет сертификата, и он мне действительно не нужен. Мне просто нужно SSL-шифрование и сжатие. Не нужно аутентифицировать ни сервер, ни клиента.

ServiceTraceViewer также не показывает ничего полезного.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

На самом деле, для проведения HTTPS-коммутации вам необходим сертификат. Вам не нужно покупать один для тестирования, вы можете сделать свой собственный, используя makecert.exe

MakeCert (Makecert.exe) - это средство командной строки, которое создает сертификат X.509, подписанный корневым ключом системного теста или другим указанным ключом. Сертификат связывает имя сертификата с открытой частью пары ключей. Сертификат сохраняется в файле, хранилище сертификатов системы или в обоих.

См. ссылку на информацию о параметрах.

Чтобы создать сертификат, попробуйте это в строке cmd.

makecert -r -pe -n "CN= compaq-jzp37md0 " -b 01/01/2000 -e 01/01/2050 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

См. Эту ссылку , чтобы узнать, как назначить SSL-сертификат вашему сайту.

P.S. Уловка, которую вы упоминаете, заключается в принятии недействительного или просроченного сертификата. Это не сработает, если у вас нет сертификата.

1 голос
/ 09 марта 2012

Вам нужен сертификат сервера , чтобы включить HTTPS. Это требование, поскольку протокол Transport Level Security (TLS) использует асимметричную криптографию для обмена ключом сеанса с клиентом по безопасному каналу.

Вы можете создать временный самозаверяющий сертификат для использования во время разработки и установить его в хранилище CurrentUser\My с помощью утилиты makecert :

makecert -n "CN=MyTestCertificate" -r -ss my

Затем вы можете легко настроить службу WCF для использования этого сертификата , используя элемент в поведении пользовательской службы:

<behaviors>
  <serviceBehaviors>
    <behavior name="SecureService">
      <serviceCredentials>
        <serviceCertificate findValue="CN=MyTestCertificate" />
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

Если вы размещаете свою службу в IIS, вам также необходимо включить SSL на веб-сайте , где служба запущена, прежде чем вы сможете общаться с ней через HTTPS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...