在服务结构应用程序中禁用TLS握手客户端证书申请

时间:2019-05-21 00:44:19

标签: c# .net ssl azure-service-fabric

我正在Azure Service Fabric中创建一个Web服务,并在.net Core 2.0的Docker容器上运行。该服务是由无法为相互TLS身份验证握手提供客户端证书的客户端调用的,但是,我的服务正在提示您输入此证书,这导致客户端重置连接且未获得响应通过该服务。

在我的设置代码中,我正在运行以下netsh命令将SSL证书绑定到端口443:

netsh.exe http add sslcert ipport=0.0.0.0:443 certhash=E362F4AB1FC4227F3010952876B505D510B0F6AA appid={8e6ea06d-b92f-4d99-911a-3c68de243eb4} verifyclientcertrevocation=enable clientcertnegotiation=disable'

这成功完成并建立了绑定,但是当客户端调用该服务时(或者当我尝试从浏览器或Fiddler / Postman调用时),我仍然收到客户端证书的请求。从文档上看,“ clientcertnegotiation”参数是此处的相关部分,据我了解,应禁用该参数以删除客户端证书提示。

客户端通过Fiddler进行重定向呼叫时,无需重置连接即可成功调用服务。

我不确定在SF群集端是否配置有误,所以我也仔细研究了那里的配置。我发现一个名为“ ProtectionLevel”的安全属性,该属性设置为“ EncryptAndSign”。搜索有关此信息,我在Microsoft文档Understanding Protection Level上找到了此页面。

我不确定我是否正确解析了该页面上的信息,但是我认为可能是相关的,因此我在开发环境中进行了测试,以查看如果设置“ ProtectionLevel”是否会得到提示设置为“无”,但是仍然提示我输入证书。

我也正在使用CORS,尽管我怀疑这与相互TLS配置有关,并且无论是否启用CORS,我都会得到相同的行为。

是否还有其他服务结构或应用程序级设置会覆盖我的SSL绑定配置?服务结构是否通过请求客户端证书的另一个服务进行路由?

1 个答案:

答案 0 :(得分:0)

我建议“ verifyclientcertrevocation = 启用”可能导致它要求证书,而不考虑“ clientcertnegotiation = 禁用