通过ASP.NET应用程序中的客户端签名SSL证书对用户进行身份验证

问题描述:

我想为站点添加额外的安全性并为我的用户生成自签名客户端证书。通过ASP.NET应用程序中的客户端签名SSL证书对用户进行身份验证

我设置IIS以要求客户端证书,开创了服务器使用自签名的证书,随后几篇文章解释了如何通过makecert和pvk2pfx(他们都使用下面的方法)来创建客户端sertificate:

makecert -r -n "CN=My Personal CA" -pe -sv MyPersonalCA.pvk -a sha1 -len 2048 -b 01/21/2010 -e 01/21/2016 -cy authority MyPersonalCA.cer 
makecert -iv MyPersonalCA.pvk -ic MyPersonalCA.cer -n "CN=John Doe" -pe -sv JohnDoe.pvk -a sha1 -len 2048 -b 01/21/2010 -e 01/21/2016 -sky exchange JohnDoe.cer -eku 1.3.6.1.5.5.7.3.2 
pvk2pfx -pvk JohnDoe.pvk -spc JohnDoe.cer -pfx JohnDoe.pfx -po PASSWORD 

我在受信任的证书颁发机构中安装了MyPersonalCA,并在适当的证书存储中安装了JohnDoe.pfx。

然而,当我打开我的网站我得到:

HTTP错误403.7 - 禁止

我缺少什么?为什么浏览器没有发送客户端证书?

+0

你怎么会找到一个解决办法?我有同样的问题 – Fabske

有下列情况下该浏览器可以让你选择一个证书:

  1. 证书已与“客户端身份验证”选项

    1.3.6.1.5.5.7.3.2 - id_kp_clientAuth 
    
  2. 的证书迹象生成您的证书必须安装在服务器上的可信根证书颁发机构(不在客户端上!)

  3. 证书本身必须安装在浏览器证书存储(系统商店即与镀铬,内部储存在Firefox)

注意,这仍然是不够的认证,还需要一个自定义的验证模块或在服务器上手动配置证书和用户之间的映射。

关注本文 Client certificate authentication 对于Internet Explorer,这应该可以正常工作,即在站点打开时要求您选择证书。 对于Firefox,你必须做一个额外的步骤,你必须通过设置添加证书,这里是 Firefox does not use windows certificates 好运