首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WCF客户。客户证书。第一次呼叫成功,第二次呼叫失败

WCF客户。客户证书。第一次呼叫成功,第二次呼叫失败
EN

Stack Overflow用户
提问于 2019-06-04 19:22:25
回答 1查看 271关注 0票数 0

我试图通过https连接到soap11服务,使用soap11和客户端证书凭据,使用c# .NET 4.5。我使用vs工具添加服务引用,它为我创建了一个soap客户机。

我创建了一个customBinding来完成soap11上的https:

App.config

代码语言:javascript
运行
复制
<system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="*****" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:05:00" sendTimeout="00:05:00">
          <textMessageEncoding messageVersion="Soap11"/>
          <httpsTransport useDefaultWebProxy="false" requireClientCertificate="true" allowCookies="false" />
        </binding>
      </customBinding>
    </bindings>
    <client>
        <endpoint address="******************"
            behaviorConfiguration="******************"
            binding="customBinding" bindingConfiguration="******************"
            contract="******************"
            name="******************" />
    </client>
  <behaviors>
    <endpointBehaviors>
      <behavior name="******************">
        <clientCredentials>
          <clientCertificate findValue="******************" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
        </clientCredentials>
      </behavior>
    </endpointBehaviors>
  </behaviors>
</system.serviceModel>

c#代码:

代码语言:javascript
运行
复制
     var client = new IConsultService.ConsultServiceClient();
     client.consult("1"); 
     client.consult("1"); <!-- fail error 404 - there was not endpoint listening at

如果我在没有证书的情况下在接收一个tomcat 404,如果我发送客户端证书第一次工作正常,在我看来我似乎被重定向了。问题是,在sencond请求失败(404)时,如果我再次实例化客户机,也会失败。只有当停止应用程序并重新启动应用程序时,才能再次工作。似乎有些东西被缓存在程序的静态堆栈中.

由于是404,我猜这是来自客户端证书的东西,如果我请求没有证书,那么错误是相同的。

我尝试通过编程创建绑定,设置ClientBase.CacheSetting = CacheSetting.AlwaysOff。

Edit1:使用System.Net.HttpWebRequest的情况相同,第一次请求确定,第二次请求404。

Edit2:握手第一次请求发送“证书,客户端密钥交换”和第二次请求“更改密码密钥交换”

是否有办法强制关闭通道,并始终发送“证书,客户端密钥交换”?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-06-06 06:17:14

首先,如果我们使用X509certificate对客户端进行身份验证,通常需要在服务器和客户端之间建立信任关系,即我们应该在受信任的根证书颁发机构中安装彼此的证书,而客户端需要提供一个身份来确认服务器的身份(这通常是服务器证书的公钥,或者主机名)。

代码语言:javascript
运行
复制
<endpoint address="net.tcp://10.157.13.69:4386/" binding="netTcpBinding"
    bindingConfiguration="NetTcpBinding_ITestService" contract="ServiceReference1.ITestService"
    name="NetTcpBinding_ITestService">
    <identity>
        <dns value="vabqia969VM" />
    </identity>
</endpoint>

其次,我怀疑这个问题是由TLS版本引起的。您是否尝试过升级这些项目的Dotnetframework?以上至少4.6.2。请参阅下列文件。

https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls

如果问题还存在,请随时告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56450112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档