我正在尝试在 IIS 8 中运行的 ASP.NET MVC3 应用程序中设置客户端证书身份验证。客户端(良好的第三方)使用自签名 SSL 证书进行自我身份验证,并且我的应用程序提前知道指纹并检查请求是否具有适当的证书。
它不能立即工作 - IIS 拒绝带有 HTTP 403.16(客户端证书不受信任)的请求。
我进行了很多实验,结果发现如果我将客户端证书添加到“Root”(受信任的根证书颁发机构)或“Auth Root”(第三方根证书颁发机构)证书存储中,请求就会传递到应用程序代码 - IIS 现在信任该证书并接受请求。因此,将证书添加到其中一个存储中“就可以正常工作”。
问题是我不确定这种改变可能还会产生什么其他影响。假设好第三方丢失了证书的私钥部分,而一些坏第三方滥用了它——除了冒充好第三方,他们还能做什么?也许他们可以签署一个代码包,然后我的系统会信任它?也许他们可以颁发网站证书,让我的系统信任他们的恶意网站?
我应该将客户端证书添加到哪个商店,以最大限度地降低意外的安全风险?
答案1
您无法在不承担安全风险的情况下解决问题。您唯一的选择是在存储中安装证书Local Machine\Trusted Root CAs
。因此,所有使用 Windows 证书存储的应用程序都将信任此第三方证书。如果它是 CA 证书,则该根下的所有子证书都将在您的系统上受到信任。
如果您运行自己的 PKI,则可以通过执行该证书的合格从属关系来提高安全性。通过合格从属关系,您将能够设置各种类型的约束,在这些约束下证书是否受信任。