首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >403.7禁止使用自托管Web 2中的客户端证书身份验证。

403.7禁止使用自托管Web 2中的客户端证书身份验证。
EN

Stack Overflow用户
提问于 2013-12-16 14:47:16
回答 1查看 2.7K关注 0票数 4

很长时间的读者,第一次海报。

目标:

我们希望创建一个自己托管的Web 2服务,该服务专为身份验证目的使用客户端证书。为了开发目的,数据服务层将在与客户端层相同的机器上运行。

环境/配置:

  • 已经创建了Web 2数据服务。 这项服务没有什么复杂之处。它确实使用DelegatingHandler来验证客户端证书。

  • Web 2服务已经通过四种不同的场景“部署”:
    • IIS速递 此部署模式已正确配置。正在使用SSL证书,安全性设置为<access sslFlags="Ssl, SslRequireCert"/>

代码语言:javascript
复制
- IIS  

此模式还使用SSL证书进行了正确配置,并需要通过IIS设置客户端证书。

代码语言:javascript
复制
- "Legacy" Web API 2 self-hosted console app  

SSL已通过netsh正确绑定到端口,设置为"clientcertnegotiation=true“。

配置已将ClientCredentialType设置为证书。

代码语言:javascript
复制
- OWIN Web API 2 self-hosted console app 

-- SSL已通过clientcertnegotiation=true设置正确地绑定到端口。

  • 客户端应用程序是一个WPF应用程序。 对于服务调用,我们使用HTTPClient。 行动顺序如下:

代码语言:javascript
复制
 WebRequestHandler handler = new WebRequestHandler();     handler.ClientCertificateOptions = ClientCertificateOption.Manual;     handler.ClientCertificates.Add(MyCertificates.OfType<X509Certificate2>).FirstOrDefault(cert => cert.Thumbprint == SelectedCertificateThumbprint) as X509Certificate2);     handler.UseDefaultCredentials = true;     HttpClient client = new HttpClient(handler);     client.BaseAddress = SetServiceBaseAddress(client);     var results = client.PostAsync(<RequestURI>, <RequestDTO>, mediaTypeFormatter).Result;

制约因素:

我们无权在这些机器上安装Wireshark或任何其他网络监控工具。

行为:

  • 当使用Fiddler代理IIS Express和IIS承载的数据服务时:

代码语言:javascript
复制
1. Fiddler will prompt a certificate warning due to a name mismatch for SSL (we haven't turned this off or generated one for localhost.fiddler).
2. Fiddler will prompt for a "Request For Permission to Use a Key".  We believe this is a request to access the .pfx stored in Current User\Personal store based on the certificate (.cer) that is stored in the Fiddler directory so that Fiddler sign the request with the proper private key.
3. After entering the proper password, the request succeeds. 

  • 当使用Fiddler代理Owin或"Legacy“自托管数据服务时:

代码语言:javascript
复制
1. Fiddler will  prompt a certificate warning due to a name mismatch for SSL (we haven't turned this off or generated one for localhost.fiddler).  
2. A 403.7 - Forbidden is received immediately. 

  • 当使用所有四种没有Fiddler的主机模型代理时:

代码语言:javascript
复制
1. A successful response is received.  

假设:

  1. IIS和IISExpress中的“IISExpress”设置与"ClientCertNegotiate“的自托管解决方案之间似乎存在行为差异。
  2. 客户端证书协商在自托管解决方案中正常工作,因为我们在不使用Fiddler的情况下正确接收证书(我们可以在调试器中正确地拦截它)。
  3. 使用Fiddler与不使用代理之间的行为差异似乎与我们目前所能看到的更低层有关。我们现在将其归因于TCP握手。

问题:

  1. SSL证书名称不匹配是否与客户证书禁用问题有关?
  2. 在自托管场景中,如何指定"SslNegotiateCert“和"SslRequireCert”之间的区别?
  3. 在OWIN托管模型中是否有一种要求客户端证书的特定方法?
  4. 在配置数据服务时,我们是否忽略了特定的配置或设置,以便在IIS托管解决方案和自托管解决方案之间采取相同的行为方式?
  5. 我们的错误是否可能发生在其他地方,比如客户端或Fiddler证书配置中?
EN

回答 1

Stack Overflow用户

发布于 2014-04-13 22:38:53

我只是忙着处理一个类似的问题,我想我偶尔会找到你的第二个问题的答案。

关键在于如何使用netsh工具将服务器证书绑定到端口。

clientnegotiation参数设置为启用时,如下所示:

代码语言:javascript
复制
netsh http add sslcert ipport=0.0.0.0:443 certhash=<cert_thumbprint> appid={some_guid} clientcertnegotiation=enable

,OWIN主机开始要求客户端提供某种客户端证书(它可以是任何类型的证书)。

当将该参数设置为禁用或忽略它时,OWIN主机不需要客户机提供任何内容。

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

https://stackoverflow.com/questions/20613658

复制
相关文章

相似问题

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