我从一个概念的角度--即私钥/公钥--对PKI有相当好的理解--它们背后的数学、使用散列和加密来签署证书、事务或文档的数字签名等。我还参与了一些项目,其中openssl C库与证书一起使用,以保护通信和身份验证。我也非常熟悉openssl命令行工具。
然而,我对基于web的PKI启用项目的经验很少&因此,我试图设计和编码一个个人项目,以更好地理解这一点。
这是银行的网站。所有网上银行用户都可以使用一些已知的CA(VeriS传、Thawte、委托等)颁发的证书。银行不负责为用户购买证书。这些证书将用于银行网站的认证。平台/操作系统等仍未修复。
我在想什么是最好的认证方式。
我想知道哪种方法是常用的?什么是最佳做法?如果我应该使用#3,那么最好的方法是什么呢?
此外,智能手机应用程序也可以轻松工作,这将是一个额外的好处。
让我澄清我的声明“代码认证部分自己”,因为一些答案似乎表明,它被误解了-我的错,因为不清楚。
这并不意味着我自己写密码。这意味着我实际上将显式地调用密码例程,而不是依赖于IIS或任何其他any服务器。
发布于 2013-06-07 15:46:02
个人证书适用于定期更新证书(其背后有一个相当健壮的过程),并且可以作为客户喜欢的“无密码”身份验证来实现。
但失败的地方是
请注意,在iPad和许多现代浏览器上,使用沙-2签名的现代个人证书并不适用于Safari。这是因为个人证书从来没有像认证机构所认为的那样得到真正的发展。颁发30,000个证书(我们所做的)与某些硬件令牌类型相同。
您允许客户找到自己证书的策略实际上是无效的。现在很难找到个人证书的供应商,而且它们非常昂贵--你需要确保业务案例有效,否则客户就不会相信这一点。
发布于 2013-06-09 12:58:51
好吧,这里发生了很多事。首先,如果端点上不支持客户端证书身份验证,则它是无用的。因此,我们有一个伟大的帖子从Intrepidus覆盖智能手机应用程序客户端身份验证的基础知识。
接下来,让我强烈建议您不要对自己的身份验证例程进行编码。有很多伟大的,经过审查的图书馆来处理这个问题。您将通过为auth运行一个成熟的库来保存自己的功能和安全漏洞。为此使用经过审查的、成熟的库肯定是最佳实践。
接下来的最佳实践是使用目录来处理客户端:证书映射。因此,您将看到AD或LDAP。正如您所提到的,Windows和IIS使您非常无缝。IIS.net在在IIS下配置证书映射上做得很好。
如果您使用Apache,这就不那么容易了。它看起来像国防部_合著_ldap做客户端证书映射,但我没有亲自使用它。
因此,这就引出了实际实现这样的东西的后勤问题。您没有对用户的证书进行签名,因此,对于提交其证书并让应用程序将其发布到目录中的用户来说,您需要一个固定的过程。我希望看到这方面的两个因素,包括密码、短信或对可信号码的调用。我会给用户发电子邮件,让他们知道他们的帐户中添加了一个证书。我会让用户删除用户证书映射通过他们的帐户管理页面在应用程序。
我想看看谷歌和Facebook在为可信设备设置cookie时做了些什么,以避免两个因素。在允许只使用证书之前,我会有双因素的新设备。
我还会考虑如何处理被撤销的用户证书。这意味着检查外部证书吊销列表(CRL)。如果客户端证书没有定义CRL分发点,怎么办?您是否在用户登录时或作为作业的一部分按计划登录时检查CRL,因为可能只有少数几个CRL在使用?
实际上,这归结为:我如何知道我可以信任用户的证书没有被破坏,以及如何信任我可以将证书X映射到用户Y。
https://softwareengineering.stackexchange.com/questions/201119
复制相似问题