虽然我确实想逐个问题地回答,但我想我会逐个主题地讨论这个问题:
授权/认证
好,首先 对于您的示例,您同时需要:
- 身份验证 -证明用户就是他说的人。您选择了PKI,并将隐含的私钥证明作为您的身份验证。
- 授权 -用户与他被允许执行的操作的联系。这是登录和访问允许的帐户之间的连接点。证书到帐户和帐户访问功能的映射是授权。
在授权方面,您需要弄清楚将用户的主题DN连接到他们的银行帐户的过程。考虑到交易的重要性,您绝对希望为此制定一个强有力的流程,并且这里没有唯一正确的方法。您必须与银行(可能是律师)进行协商,以找出如何按照政策进行操作。
SSL,客户端/服务器身份验证,私钥证明
SSL协议始终包括服务器身份验证,以及用于客户端授权的其他可选设置。您对#1的看法是正确的,因为Apache提供了一个设置,可以通过PKI添加“客户端身份验证”,并且可以为其提供信任的CA列表。在需要通过PKI进行客户端身份验证的SSL会话的设置过程中-您将获得私钥证明。
选项#1或选项#2将提供此功能-可以通过这种方式配置Apache和IIS。最佳实践是明智的选择,我会选择其中一种来推广您自己的解决方案。#3危险地接近“不要自己编写密码”规则。假定您可以将事务与经过身份验证的SSL会话绑定在一起,则没有理由进行自己的事务。
另外-在选项#1或选项#2中,都有一种方法可以使您着手整个证书,并从那里到达证书的任何部分。通常,主题DN和/或证书序列号用于确定用户身份以进行授权。
在“常见用法”方面-所有主要的Web服务器都很常见。可以使用客户端身份验证SSL配置IIS,Apache,Tomcat和许多其他配置。那里的决定很大程度上取决于整体实施情况。主要的Web服务器都具有访问SSL会话中提供的证书的方法,这是更详细的验证所需要的。
证书验证插件
至少,您需要:
- 设置SSL会话
- 提取证书(大多数Web服务器将检查证书的签名和私钥证明)
- 验证证书的有效日期(不是任何Web服务器提供的日期)
- 执行此证书可以访问的帐户的授权检查
考虑到银行业务的高风险,您可能还需要验证证书的吊销状态-如果用户的私钥丢失或被盗,则应吊销其证书。
IIS可能具有进行OCSP或CRL验证的功能-它往往是一种更全面的(手持!)类型的系统,但我不记得要花时间了。我也不记得这是否会迫使您为此使用Microsoft产品。对于Apache,几乎可以肯定,您必须编写代码或添加OCSP / CRL检查。我相信它在SSL会话建立过程中会产生异常现象-通常在建立SSL会话时执行一次此检查。
授权书
在#1与#2上-没错,IIS具有一些内置功能,可以将SSL会话中提供的证书绑定到AD存储库。在这种情况下,Microsoft会加倍努力以使其易于购买和使用更多产品。:) IIS与AD之间的联系存在细微差别,这超出了此问题的范围,也超出了我的直接回忆。我已经用IIS和AD做过一些非常疯狂的事情,并且我的一般想法是,虽然您做的事情相对简单,但是却很简单,就像基于基于证书的用户名从AD存储库中提取用户名一样。当您遇到更复杂的数据存储问题,奇怪的AD查找以及使用PKI特别疯狂(但合法)的问题时,
即使使用IIS,也仍然可以-您需要在AD结构中或其他位置添加一些内容,以便将用户名绑定到银行帐户。通常在银行业务中,用户有多个帐户。并且2个用户可以拥有一个联合帐户,因此这是多对多关系。
对于#1-是的,您需要编写自己的查找。您需要编写以下代码:-将证书连接到用户并将用户连接到用户银行帐户的数据库或LDAP层次结构。证书的唯一保证部分是序列号+颁发者DN。通常,主题DN会起作用,但并非在所有PKI系统中都可以保证。
这通常是开发人员使用PKI与Apache进行高端身份验证的方式。在许多此类系统中工作过之后,我还没有遇到过简单的授权重用的情况,因此我从来没有真正看到它是一个巨大的缺点-我将不得不以任一种方式进行专门的设置,因为角色/特权是从来都不容易。
这听起来像是#1和#3的混合-我的强烈建议是-使用您用于生成SSL会话的任何应用程序/ Web服务器的本机功能。这将使浏览器到服务器的证书查询设置以标准的最佳实践方式进行。从那里开始,使用Apache,您需要推出自己的授权系统。IIS将为您提供Microsoft的想法。
已知陷阱
做一堆浏览器测试。一年又一年,在浏览器之间,我发现使用SSL会话处理的陷阱。正确地将SSL会话链接到一系列网页请求并确保注销得到正确处理是最大的关注领域。服务器和浏览器软件都有很多关系。SSL足够稳定,以至于它可以正常工作时就可以正常工作,尽管可能存在IE与其他所有问题。
特别是,上次我这样做时,强制编码和会话超时的问题非常重要。
智能手机
好。运气。几乎是我能说的。我根本不是移动应用程序开发人员,但是到目前为止,我的印象是,在普通的智能手机中,PKI证书处理不达标或根本不存在。
我很想被证明是错误的。