首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带证书的webHttpBinding

带证书的webHttpBinding
EN

Stack Overflow用户
提问于 2014-08-19 11:59:50
回答 1查看 2.8K关注 0票数 1

我正试图获得一个自我托管的服务。调用该服务将返回以下内容:

基础连接已关闭:在接收时发生意外错误。

服务端点如下所示

代码语言:javascript
复制
<endpoint address="https://MACHINE:8010/rest/users" binding="webHttpBinding" bindingConfiguration="certificate" contract="Online.DomainObjects.Remote.IUserManagerRemote" />

我这么做是为了打开通道:

代码语言:javascript
复制
 netsh http add urlacl "url=https://+:8010/" user=BUILTIN\Users

我在服务器中打开了WCF跟踪,但在日志中没有获得任何信息,因此这是一个客户端连接问题。

我增加了一种服务行为。

代码语言:javascript
复制
    <behavior name="certificate">
      <serviceCredentials>
        <serviceCertificate
          storeLocation="LocalMachine"
          x509FindType="FindByThumbprint"
          findValue="VALIDTHUMBPRINT" />
      </serviceCredentials>
    </behavior>

我添加了一个绑定配置。

代码语言:javascript
复制
  <webHttpBinding>
    <binding name="certificate">
      <security mode="Transport">
        <transport clientCredentialType="Certificate" />
      </security>
    </binding>
  </webHttpBinding>

下面的代码用于调用服务

代码语言:javascript
复制
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);    
    var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, "VALIDTHUMBPRINT", false).OfType<X509Certificate2>().First();

    var request = (HttpWebRequest) WebRequest.Create("https://machine:8010/rest/users/display?key=OnlineStanlibId(1653510)");
    request.ClientCertificates.Add(certificate);
    request.Method = "GET";
    using (var reader = new StreamReader(request.GetResponse().GetResponseStream()))
        reader.ReadToEnd().Dump();

如果我尝试使用fiddler (使用ssl解码)来检查错误,我就会得到这样的结果。

代码语言:javascript
复制
A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

    Version: 3.1 (TLS/1.0)
    Random: 53 F3 39 10 E8 4B 5C D6 17 02 8B A0 42 CD 98 B7 37 56 3F B4 35 E6 3E B5 15 89 3B 6D E9 8F BA 19
    SessionID: empty
    Extensions: 
        renegotiation_info  00
        server_name slc11555001
        elliptic_curves secp256r1 [0x17], secp384r1 [0x18]
        ec_point_formats    uncompressed [0x0]
    Ciphers: 
        [002F]  TLS_RSA_AES_128_SHA
        [0035]  TLS_RSA_AES_256_SHA
        [0005]  SSL_RSA_WITH_RC4_128_SHA
        ...(There are more of these)

任何关于如何进一步调试的建议都是很棒的.

提示文本视图显示: HTTPS握手“机器”失败。System.IO.IOException无法从传输连接读取数据:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-19 15:50:25

在创建使用传输安全性的自托管Windows通信基础(WCF)服务时,还必须使用X.509证书配置端口。为了将证书绑定到服务,您需要使用‘’命令,并提供证书的拇指打印、应用程序/服务guid和ip/端口。

代码语言:javascript
复制
netsh http add sslcert ipport=0.0.0.0:8000 certhash=000...a5e6 appid={001-...-FEFF} 

以下链接提供了一个很好的参考:

http://msdn.microsoft.com/en-us/library/ms733791(v=vs.110).aspx

HTTPS from a console application?

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

https://stackoverflow.com/questions/25382863

复制
相关文章

相似问题

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