网站PKSC #11智能卡认证和SSL客户端证书

18
我们正在为一个网站创建三因素身份验证,因为在斯堪的纳维亚国家有法律要求这样做。客户正在使用NetID品牌的浏览器插件,在浏览器中进行PKCS#11证书认证。智能卡由合作伙伴在客户端集中提供。
关于如何在Web浏览器中进行PKCS11认证的示例实现或教程并不多见。是否有人可以指出一些例子实现或者教程?
编辑:发现SSL客户端证书
- 看起来认证方法是SSL客户端证书 - 我们如何管理用户与其智能卡之间的关系? - 用户是否向我们提供他们的公钥,我们根据此进行认证? - 我们需要使用自己的证书为每个用户单独签名/配置吗? - 所有用户智能卡是否都包含一个“通用”密钥,我们用它来测试供应商证书?
参考链接: - http://www.garex.net/apache/ - http://www.impetus.us/~rjmooney/projects/misc/clientcertauth.html - https://en.wikipedia.org/wiki/PKCS11 - https://service.secmaker.com/examples/plugin.aspx
3个回答

12
不要使用JavaScript进行加密。 JavaScript加密存在许多问题,而且我认为许多浏览器不会轻易地让你直接从JavaScript(在页面内运行)访问PKCS#11。
许多浏览器支持PKCS#11用于HTTPS身份验证,即在SSL/TLS连接(作为HTTPS的一部分)中使用PKCS#11进行客户端证书身份验证。
假设您已经有一个可用的PKCS#11库(比如OpenSC在/usr/lib/opensc.so),您可以配置Firefox来使用它:
  • 首选项->高级->加密,进入“安全设备”
  • 点击“加载”
  • 选择模块名称(作为列表中的参考)并指向/usr/lib/opensc.so文件(或者根据您的情况是适当的PKCS#11模块)。
然后,当您连接到请求客户端证书的网站时,浏览器应该向您提供从启用PKCS#11的设备中选择证书的选项。
PKCS#11配置机制因浏览器而异,但通常只需设置PKCS#11模块的路径即可。
据我所知,Internet Explorer没有使用PKCS#11(至少不需要额外支持),而应依赖于MS CryptoAPI和InfoCards。
在服务器端,您需要配置客户端证书身份验证的要求。这与PKCS#11无关。
根据您的编辑,您应该了解证书颁发机构(CA)和公钥基础设施(PKI)。您可以部署自己的内部PKI,但听起来您的要求是与现有的PKI集成。这主要是一个管理问题,因此请与制定此要求的人员核实他们希望依赖哪个CA(可能是他们自己的)。

在使用客户端证书认证时,客户端会展示其证书(其中包含用户的公钥和其他属性,包括标识符:主体可分辨名称),SSL/TLS握手将确保客户端拥有此公钥证书的私钥。然后,服务器会根据其信任的CA验证该证书(这也是服务器端SSL设置之一)。

一旦您配置了要信任的CA,通常会使用证书的主题DN将其映射到内部用户名称(如果需要)。对此并没有硬性规定,因为它取决于您的内部用户命名方案。话虽如此,通常最好将完整的主题DN用作用户名。


谢谢。这为我澄清了很多事情,基于此,我能够向智能卡提供商发送更多关于证书如何处理的问题。 - Mikko Ohtamaa
1
您可能完全不需要使用PKCS#11。现在,智能卡或USB令牌驱动程序(CSP)使证书可用于CertificateStore中,因此可以使用现代浏览器的浏览器扩展程序(因为不再支持Java小程序和ActiveX)。 Signer.Digital Chrome扩展是我们公司提供的免费扩展之一,请在Google上搜索它,然后您就可以开始使用了。 - Bharat Vasant

3

目前在浏览器进程内无法执行PKCS#11操作。所有可用的本机技术要么已经过时(NPAPI),要么未在所有浏览器中实现。您需要在浏览器外部执行此操作并创建一些互连通信。


2
现在你可以这样做。使用PKCS#11智能卡或令牌进行Web身份验证可以通过使用NCryptoki的Silverlight版本来实现。请参见http://www.ncryptoki.com 你有两个选择:
1)使用NCryptoki的Silverlight版本并开发自己的Silverlight用户控件,使用智能卡提供的PKCS#11函数实现您的身份验证协议。
2)使用基于上述Silverlight版本的JQuery插件,并通过调用JavaScript中的PKCS#11函数来实现身份验证协议。

1
谢谢。Silverlight 真的是一匹垂死的马,而且只绑定在一个平台上,所以这里不是一个选择。然而,我成功地通过 Apache 和 SSL 客户端证书解决了这个问题。一旦完成,我会在这里发布我的答案。 - Mikko Ohtamaa
@MikkoOhtamaa,你能否在这里发布你的解决方案。 - guleryuz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接