实际上我在同一个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也没有显示任何有用的内容。
答案 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。您提到的技巧是接受无效或过期的证书。如果你没有证书,它就无法工作。