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

标签 http authentication ssl smartcard pkcs#11

由于某个斯堪的纳维亚国家/地区的法律要求,我们正在为网站创建三因素身份验证。客户使用 NetID 品牌的浏览器插件在浏览器中执行 PKCS #11 证书身份验证。智能卡由客户的合作伙伴集中提供。

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

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

  • 看起来身份验证方法是 SSL 客户端证书

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

  • 用户是否向我们提供了他们的公钥并且我们根据他们进行身份验证?

  • 我们是否需要使用我们自己的证书分别签署/配置每个用户?

  • 是否所有用户智能卡都包含我们根据提供商证书测试的“通用” key ?

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#11 进行 HTTPS 身份验证,即使用 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 和 InfoCards。

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


完成编辑后,您应该阅读有关证书颁发机构 (CA) 和公钥基础设施 (PKI) 的内容。您可以部署自己的内部 PKI,但听起来您的要求是与现有 PKI 集成。这主要是一个管理问题,因此请与提出此要求的人核实,看看他们想要依赖哪个 CA(可能是他们自己的)。

当使用客户端证书身份验证时,客户端将出示其证书(其中包含用户的公钥和其他属性,包括一个标识符:主题可分辨名称)并且 SSL/TLS 握手将确保客户端具有私有(private)此公钥证书的 key 。然后,服务器根据它信任的 CA 验证此证书(这也是服务器端的 SSL 设置)。

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

关于http - 网站 PKSC#11 智能卡身份验证和 SSL 客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792899/

相关文章:

Java - HttpServer 不提供图像

node.js - 在 Node.js 中发送多个 HTTP 请求 : Not receiving any responses or timeouts

iOS:上传图片到服务器,打不开

Windows Azure 上的 WCF session

mysql - Spring Security 使用旧凭据对用户进行身份验证,直到 Web 应用程序重新启动

java - 使用 Jersey 客户端下载文件时内容类型为空

ios - 如何实现用户身份验证系统并创建用于社交网络登录的帐户?

ssl - 在 Tomcat 中使用虚拟主机时如何将 HTTP 流量重定向到 HTTPS

PHP - 如何从 shell_exec 输出中获取参数

java - 如何在 glassfish 3.1.2.2 上安装 ssl