使用PKI证书进行Web身份验证
我从概念的角度(即私钥/公钥)背后的数学,使用哈希和加密来签署证书,使用交易或文档进行数字签名等,对PKI相当了解。 C库与用于安全通信和身份验证的证书一起使用。我也非常熟悉openssl命令行工具。 但是,我对基于Web的启用PKI的项目几乎没有经验,因此我试图设计和编写个人项目以更好地理解这一点。 要求 这是一家银行的网站。允许所有网上银行用户使用由一些已知CA(verisign,Thawte,entrust等)颁发的任何证书。银行不负责为用户购买证书。这些证书将用于银行网站的身份验证。平台/操作系统等仍未修复。 设计 我想知道什么是进行身份验证的最佳方法。 我看到Apache有一种启用2种方式的SSL的方法-在这种情况下,我认为导航到该网站会自动向用户请求证书。但是我不确定这是否足够,因为似乎它所验证的只是证书是否由受信任的CA签名,还可能是证书是否位于证书主题行的白名单中,等等。但这还不够银行案例,因为您需要能够将bankuserid与证书相关联。 IIS似乎有一种方法可以让我为Active Directory中的每个用户存储证书。通过阅读几篇MSDN文章,我了解了这一点。您在IIS中打开2种方式的SSL,然后,当用户尝试导航到网站时,IIS将向浏览器发送带有已批准CA列表的请求,浏览器将允许用户从其证书库中选择适当的证书并将其发送到后端。我假设IIS将做2件事 确保用户具有与证书相对应的私钥(通过掩盖协商) IIS根据AD用户证书映射,将用户名报告给应用程序。 通过调用加密函数显式地进行身份验证,而不是依赖于依赖于Web服务器的身份。 显示一个用户屏幕,在该屏幕上他上传证书,并且应用程序确保用户具有与证书相对应的私钥(通过要求前端使用证书对某些字符串进行签名)。 该应用程序具有数据库,其中存储了一些数据,该数据允许每个用户映射到其用户ID。这可能是 与每个用户标识相对应的整个证书 与每个用户ID对应的CA和证书序列号。 我想知道哪种是常用的方法?最佳做法是什么?如果我应该选择#3,那么最好的方法是什么? 可以轻松与智能手机应用程序一起使用的功能将是额外的好处。 更新资料 让我澄清一下我的声明“自己编写身份验证部分”,因为某些答案似乎表明它已经被误解了-我的缺点是不清楚。 这并不意味着我自己写加密货币。这只是意味着我实际上将显式调用加密例程,而不是依赖IIS或任何其他Web服务器隐式地执行加密例程。