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

问题描述:

我们正在创建一个网站的三因素认证由于一个斯堪的纳维亚国家的法律要求。客户使用NetID品牌的浏览器插件在浏览器中执行PKCS#11证书认证。智能卡由客户的合作伙伴提供。网站PKSC#11智能卡验证和SSL客户端证书

本主题没有太多在线资源或教程可用。会有人有任何指向示例实现或教程如何在Web浏览器中进行PKCS11身份验证吗?

编辑:发现有关SSL客户端证书

  • 貌似验证方法是SSL客户端证书

  • 我们如何管理用户及其智能卡之间的关系?

  • DO用户提供我们自己的公钥和我们对他们进行身份验证?

  • 我们是否需要单独签署/提供每个用户使用我们自己的证书模板?

  • 是否所有用户智能卡包含一个“通用”关键是我们测试对供应商证书?

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

不要用JavaScript做。 JavaScript cryptography has a number of problems,我认为很多浏览器都不会让你直接从JavaScript(从页面内部运行)访问PKCS#11。

许多浏览器支持用于PKCS HTTPS认证#11,即,使用PKCS用于客户证书验证#11作为SSL/TLS连接(如HTTPS的一部分)的一部分。

假设你已经有一个可用的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和InfoCard的来代替。

在服务器端,你将需要配置客户端证书身份验证的要求。那里没有特定于PKCS#11的东西。


按照你的编辑,你应该阅读有关认证机构(CA)和公共密钥基础设施(PKI的)。您可以部署自己的内部PKI,但听起来您的要求是与现有的PKI集成。这主要是一个管理问题,所以请检查这些要求,看看他们想要依赖哪个CA(可能是他们的)。

当使用客户端证书认证时,客户端将显示其证书(其中包含用户的公钥和其他属性,包括标识符:Subject Distinguished Name)和SSL/TLS握手将确保客户端拥有该公钥证书的私钥。然后,服务器根据它信任的CA验证此证书(这也是服务器端的SSL设置)。

一旦你配置要信任哪些CA,映射如果需要使用证书的主题DN到内部用户名通常完成。对此没有硬性规定,因为它取决于您的内部用户命名方案。这就是说,使用完整的主题DN作为用户名通常是明智的。现在

+0

感谢。这为我澄清了很多事情,基于此我能够向智能卡提供商发送进一步的问题,以了解如何处理证书。 – 2012-01-11 23:07:00

你可以做到这一点。使用PKCS#11智能卡或令牌的Web认证可以通过使用Silverlight版本的NCryptoki来实现。见http://www.ncryptoki.com

你有两个chanches:

1)使用NCryptoki的Silverlight的版本和开发自己的Silverlight用户控件实现使用#由智能卡提供11功能PKCS您的身份验证协议

2 )使用基于上述的Silverlight版本的jQuery插件,并通过调用PKCS#11函数在JavaScript

+0

谢谢。 Silverlight真的是一匹垂死的马,绑在一个平台上,所以它不是一个选择。不过,我设法用Apache和SSL客户端证书解决了这个问题。一旦完成,我会在这里发布我的答案。 – 2013-10-20 16:46:29

+0

@MikkoOhtamaa你可以请你在这里发布你的解决方案。 – guleryuz 2016-03-04 07:27:20

目前你不能做PKCS#11的浏览器进程内执行JavaScript中的身份验证协议。所有合适的本地技术要么正在死亡(NPAPI),要么没有通过所有浏览器实现。你需要在浏览器之外进行,并创建一些互相联系的通信。