我试图使用ServiceStack进行相互SSL身份验证,后者使用HttpListener
。SSL客户端证书/与ServiceStack(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
来验证服务器证书?