Wcf客户端中的TLS

时间:2011-11-23 19:27:55

标签: c# wcf certificate wcf-security x509certificate

问题:
我无法使用Windows 7上的C#.net连接到启用TLS的Web服务端点。 小提琴请求和响应是:

请求: -

  

CONNECT myendpoint:9443 HTTP / 1.1
  主持人:myendpoint:9443
  代理连接:保持活跃

这是响应: -

  

HTTP / 1.1 502连接失败
  连接:关闭
  时间戳:18:54:29.909

HTTPS连接失败。

  

* System.Net.Sockets.SocketException:
  无法建立连接,因为目标计算机主动拒绝它:9443
      at Fiddler.ServerChatter.CreateConnectedSocket(IPAddress [] arrDestIPs,Int32 iPort ,Session _oSession)*
     *在Fiddler.Session._handleHTTPSConnect()*“

我的客户端是.net桌面/控制台应用程序。我确信我已正确完成客户端TLS /证书设置/配置。我也有一些悬而未决的问题 我做了以下事情:

我有一个互联网网络服务的“TLS启用”端点。为了正确沟通,我提供了4件事:

1)ca.cert.pem:来自CA的公共证书 2)myname.cert.pem:我的公共证书
3)myname.key.pem:我的私钥
4)密码:“mypassword”

我还提供了证书请求(.csr)以及用于生成证书的参数。

在阅读了与TLS相关的内容之后,我认为这是我需要做的事情:

步骤1)使用Openssl将ca.cert.pem转换为.cer文件,并将其添加/导入到本地计算机的“受信任的根证书颁发机构”,以便现在可以信任CA.

step2)将myname.cert.pem和myname.key.pem合并到一个.pkcs12中 “ openssl pkcs12 -export -out keystore.pkcs12 -in myname.cert.pem -inkey myname.key.pem ”。这要求输入密码,我使用“mypassword”。

step3)将keystore.pkcs12添加到“个人”证书(这里要求输入密码,我给“mypassword”)

步骤3中添加的证书的指纹是“fef4ab753a11a30a6c4342e63e00f237ef0818c1”

现在,这是我所做的app.config更改:

<bindings>
  <wsHttpBinding>
    <binding name="My_HTTPS_Endpoint_Binding" closeTimeout="00:01:00"
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text"
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
       maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
       enabled="false" />
      <security mode="Transport">
        <transport clientCredentialType="Certificate" proxyCredentialType="None"
         realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
         establishSecurityContext="true" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<client>
  <endpoint address="https://myendpoint:9443/myService"
   binding="wsHttpBinding" bindingConfiguration="My_HTTPS_Endpoint_Binding"
   contract="MyNs.myClass" name="My_HTTPS_Endpoint" behaviorConfiguration="clientBehaviour" />
</client>

<behaviors>
  <endpointBehaviors>
    <behavior name="clientBehaviour">
      <clientCredentials>
        <clientCertificate findValue="fef4ab753a11a30a6c4342e63e00f237ef0818c1"
   storeLocation="LocalMachine"
   storeName="My"
   x509FindType="FindByThumbprint" />

      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

似乎我错过了任何关键步骤?我有一些知识空白:

1)我的理解是我拥有的公钥和私钥组合仅对从服务器到客户端的通信有用。客户端到服务器消息加密如何工作?我的客户从哪里获取需要用于邮件加密的服务器的公钥?

2)是否需要在配置中提供密码?只是猜猜..

1 个答案:

答案 0 :(得分:0)

问题是,目标端口配置是错误的,他们现在修复它。端口无法访问