HTML 已弃用的客户端证书 <keygen> 的替代方案?

信息安全 证书 网页浏览器 密钥生成 客户 html-5
2021-09-05 09:59:16

keygen标签用于使浏览器生成私钥并将生成的 CSR POST 到服务器,然后服务器可以颁发证书它现在已被弃用,出于相当愚蠢的原因,但这不是重点。

那么,浏览器获取客户端证书的替代方法是什么?

4个回答

铬论坛的这篇文章中,提到了替代品

在浏览器空间中,存在替代方案,例如:

  • 如果是企业用例,请使用设备的本机管理功能。在 Windows 上,这是组策略。在 iOS/Android 上,这是移动设备管理套件。在 OS X 上,这是企业设置。在 ChromeOS 上,有 chrome.enterprise.platformKeys [11] 用于企业管理的扩展。
  • 使用 WebCrypto 实现证书注册,然后以适合平台的格式(例如 PKCS#7)交付证书和(导出的)私钥,并允许本机 OS UI 引导用户安装证书和密钥。

许多浏览器都支持 WebCrypto:[链接]

您可以使用 openpgp.js 和其他解决方案。[openpgp.js]

这里有一些例子。

您还可以生成 CSR:https ://www.w3.org/community/webcryptoapi/draft/#generatecertrequest-method

一些用于生成 CSR 的库:https ://pkijs.org/

这是一个使用 PKIjs 生成自签名 X509 证书 + 密钥对的示例:

https://github.com/infotechinc/create-x509-certificate

generateKey()函数创建密钥对。

https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#SubtleCrypto-method-generateKey

正如WebCrypto API 规范所确认的,WebCrypto API目前不是 keygen 标签的替代品

该 API 虽然允许应用程序生成、检索和操作密钥材料,但并未专门解决在特定类型的密钥存储(例如安全元件或智能卡)中提供密钥的问题。这是因为这样的供应操作通常负担着供应商特定的细节,这使得定义与供应商无关的接口成为一项不合适的无限任务。此外,此 API 不处理或解决密码模块的发现,因为这些概念依赖于底层用户代理,并且不是在常见操作系统、密码库和实现之间可移植的概念。

如果您已经有了<keygen>基于 - 的设置并想继续使用它,我创建了一个项目,该项目尝试为以下内容实现 JavaScript polyfill <keygen>

https://github.com/Cyber​​Shadow/keygen.js

此时(2017 年 4 月)我必须创建一个原生应用程序。只有 FireFox 可以使用 keygen 标签,而且,无论您发现什么 javascript 库,您都无法将证书导入 Windows,因此可以从 Chrome 中使用它。