我試圖使用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
來驗證服務器證書?