首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PKI证书的Web认证

基于PKI证书的Web认证
EN

Software Engineering用户
提问于 2013-06-07 09:13:42
回答 2查看 14.4K关注 0票数 16

我从一个概念的角度--即私钥/公钥--对PKI有相当好的理解--它们背后的数学、使用散列和加密来签署证书、事务或文档的数字签名等。我还参与了一些项目,其中openssl C库与证书一起使用,以保护通信和身份验证。我也非常熟悉openssl命令行工具。

然而,我对基于web的PKI启用项目的经验很少&因此,我试图设计和编码一个个人项目,以更好地理解这一点。

需求

这是银行的网站。所有网上银行用户都可以使用一些已知的CA(VeriS传、Thawte、委托等)颁发的证书。银行不负责为用户购买证书。这些证书将用于银行网站的认证。平台/操作系统等仍未修复。

设计

我在想什么是最好的认证方式。

  1. 我看到Apache有一种方法可以启用2种ssl --在这种情况下,我认为导航到网站会自动要求用户提供证书。但我不知道这是否足够,因为它似乎只验证一个证书是否由可信的CA签名&也可能是它是否在证书的主题行的白名单中,等等。但对于银行案件来说,这还不够,因为您需要能够将银行用户身份与证书相关联。
  2. IIS似乎有一种方法可以为Active Directory中的每个用户存储证书。这就是我从几篇MSDN文章中了解到的。在IIS中打开双向SSL &然后当用户试图导航到该网站时,IIS将向浏览器发送一个包含已批准CA的列表的请求,浏览器将允许用户从他的证书库中选择一个适当的证书并将其发送到后端。我假设IIS会做两件事
    • 确保用户拥有与证书相对应的私钥(通过幕后协商)
    • 基于AD用户证书映射,IIS将向应用程序报告用户名。

  3. 通过调用crypto函数来执行身份验证,而不是依赖于the服务器来执行。
    • 显示一个用户屏幕,他上传了一个证书,应用程序确保用户拥有与证书相对应的私钥(通过要求前端使用证书签名一些字符串)。
    • 应用程序有一个数据库,其中一些数据被存储,允许每个用户被映射到他的userid。这可能是
    • 与每个userid对应的整个证书
    • 与每个用户id对应的CA和cert序列号。

我想知道哪种方法是常用的?什么是最佳做法?如果我应该使用#3,那么最好的方法是什么呢?

此外,智能手机应用程序也可以轻松工作,这将是一个额外的好处。

更新

让我澄清我的声明“代码认证部分自己”,因为一些答案似乎表明,它被误解了-我的错,因为不清楚。

这并不意味着我自己写密码。这意味着我实际上将显式地调用密码例程,而不是依赖于IIS或任何其他any服务器。

EN

回答 2

Software Engineering用户

发布于 2013-06-07 15:46:02

个人证书适用于定期更新证书(其背后有一个相当健壮的过程),并且可以作为客户喜欢的“无密码”身份验证来实现。

但失败的地方是

  • 每张证书的成本
  • 与现代浏览器的兼容性
  • 最终用户提取证书并不安全地存储私钥

请注意,在iPad和许多现代浏览器上,使用沙-2签名的现代个人证书并不适用于Safari。这是因为个人证书从来没有像认证机构所认为的那样得到真正的发展。颁发30,000个证书(我们所做的)与某些硬件令牌类型相同。

您允许客户找到自己证书的策略实际上是无效的。现在很难找到个人证书的供应商,而且它们非常昂贵--你需要确保业务案例有效,否则客户就不会相信这一点。

票数 2
EN

Software Engineering用户

发布于 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。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/201119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档