使用HTTPSTransport进行BinaryMessageEncoding

时间:2012-03-09 12:48:09

标签: .net wcf https

实际上我在同一个WCF Web服务上实现HTTPS和compression时遇到问题,但使用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>

但它一直让我关注CommunicationException:

https://localhost:8036/Services/FileService发出HTTP请求时发生错误。这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由于客户端和服务器之间的安全绑定不匹配造成的。

InnerException: {“基础连接已关闭:发送时发生意外错误。”}

我知道这表明这是由于无效的证明文件,我也尝试过this trick,但它仍然不起作用。 (我没有sertificate,真的不需要。我只需要SSL加密和压缩。无需验证服务器或客户端。

ServiceTraceViewer也没有显示任何有用的内容。

2 个答案:

答案 0 :(得分:1)

需要服务器证书才能启用HTTPS。这是一项要求,因为Transport Level Security (TLS)协议使用非对称加密技术,以便通过安全通道与客户端交换会话密钥。

您可以create a temporary self-signed certificate to use during development使用makecert实用程序将其安装在CurrentUser\My商店中:

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

然后,您可以在自定义服务行为中轻松configure your WCF service to use that certificate使用<serviceCertificate>元素:

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

如果您在IIS中托管服务,则必须先enable SSL on the web site运行该服务,然后才能通过HTTPS与其进行通信。

答案 1 :(得分:1)

实际上,为了进行HTTPS通信,您需要一个证书。您不必购买一个用于测试目的,您可以使用makecert.exe

制作自己的

MakeCert (Makecert.exe)是一个命令行工具,可以创建由系统测试根密钥或其他指定密钥签名的X.509证书。证书将证书名称绑定到密钥对的公共部分。证书将保存到文件,系统证书存储或两者。

请参阅link了解有关参数的信息。

为了创建证书,请在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

请参阅此link,了解如何为您的网站分配SSL证书。

P.S。您提到的技巧是接受无效或过期的证书。如果你没有证书,它就无法工作。