【发布时间】:2014-03-05 15:33:31
【问题描述】:
我正在尝试使用 ServiceStack 进行双向 SSL 身份验证,它在后台使用 HttpListener。
我在服务器上使用这个命令将服务器证书绑定到所需端口,并启用客户端证书:
netsh http add sslcert ipport=0.0.0.0:1234 certhash=5d51087438cbea33f2a4d86214b11a866876b9c5 appid={00000000-1111-2222-3333-444444444444} clientcertnegotiation=enable
如果我运行这个命令,我可以确认它是 Negotiate Client Certificate : Enabled:
netsh http show sslcert
然后我使用以下方法为命名空间添加预留:
netsh http add urlacl url=https://+:1234/ user="NT AUTHORITY\NETWORK SERVICE"
“正常”服务器身份验证似乎工作正常;客户端正在接收服务器的证书,我可以使用 ServicePointManager.ServerCertificateValidationCallback 覆盖受信任的内容。
但是如果客户端没有发送客户端证书,它会正常工作。如果客户端发送客户端证书(无论服务器信任还是不信任),它仍然可以正常工作。这当然不对!
我正在使用HttpWebRequest.ClientCertificates.Add(X509Certificate) 添加客户端证书。
我查看了网络上的流量,AFAICS 服务器正在发送受信任的 CA 列表并请求客户端证书。
我是否需要覆盖服务器上的某些内容来执行客户端发送的证书的验证,类似于客户端如何使用ServicePointManager.ServerCertificateValidationCallback 来验证服务器证书?
【问题讨论】:
标签: c# ssl servicestack httplistener