wcf客户端的TLS
本文关键字:TLS 客户端 wcf | 更新日期: 2023-09-27 18:15:37
问题:
我无法在windows7上使用c# .net连接到启用TLS的web服务端点。Fiddler请求和响应是:
请求:-
CONNECT myendpoint:9443 HTTP/1.1
主持人:myendpoint: 9443
代理连接:Keep-Alive"
,下面是响应:-
HTTP/1.1 502连接失败连接:紧密
时间戳:18:54:29.909
* System.Net.Sockets.SocketException:
无法连接,因为目标机器主动拒绝它:9443
在Fiddler.ServerChatter 。CreateConnectedSocket(IPAddress[] arrDestIPs, Int32 iPort, Session _session)*
*at fiddler . session . _handlehttpconnect ()*"
我的客户端是。net桌面/控制台应用程序。我不确信我已经正确地完成了客户端TLS/证书设置/配置。我还有几个问题没有回答。
我做了以下的事情:
我有一个互联网web服务的"启用TLS"端点。为了正确沟通,我得到了4样东西:
1) CA .cert.pem:来自CA的公开证书
2) myname.cert.pem:我的公共证书
3) myname.key.pem:我的私钥
4)密码:"mypassword"
在阅读了TLS相关的东西之后,我认为这是我需要做的:
step1)使用Openssl将CA .cert.pem转换为。cer文件,并将其添加/导入到本地计算机的"受信任的根证书颁发机构"中,以便CA现在可以信任。
将myname.cert.pem和myname.key.pem合并为.pkcs12文件openssl pkcs12 -export -out keystore。-in myname.cert.pem -inkey myname.key.pem"。这要求一个密码,我使用"我的密码"。
step3)添加密钥存储库。pkcs12到"个人"证书(这里它要求密码,我给出"我的密码")
步骤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)是否需要在配置中提供密码?只是猜测. .
问题原来是目标端口配置是错误的,他们现在修复了它。端口不可达