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

时间:2012-01-09 17:55:14

标签: http authentication ssl smartcard pkcs#11

由于斯堪的纳维亚国家的法律要求,我们正在为网站创建三因素身份验证。客户使用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 个答案:

答案 0 :(得分:8)

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

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

假设您已经有一个PKCS#11库(比如/usr/lib/opensc.so中的OpenSC),您可以配置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作为用户名通常是明智的。

答案 1 :(得分:3)

目前你无法在浏览器进程中做PKCS#11。所有合适的本机技术要么死亡(NPAPI),要么不通过所有浏览器实现。您需要在浏览器外部进行操作并创建一些互连通信。

答案 2 :(得分:2)

现在你可以做到。使用PKCS#11智能卡或令牌的Web身份验证可以使用Silverlight版本的NCryptoki实现。见http://www.ncryptoki.com

你有两个椅子:

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

2)使用基于上述Silverlight版本的JQuery插件,并通过在JavaScript中调用PKCS#11函数在JavaScript中实现身份验证协议