HTML5中的 Keygen 标记

所以我在 HTML5中发现了这个新的标签,<keygen>。我不能完全弄清楚它的用途,它是如何应用的,以及它可能会如何影响浏览器行为。

我知道这个标签是用于表单加密的,但是 <keygen>和拥有域的 SSL 证书有什么区别呢。还有,什么是 challenge属性?

我不打算使用它,因为它还远远没有在一个可接受的浏览器范围内实现,但我很好奇这个标签到底是做什么的。我所能找到的只是模糊的千篇一律的文档,没有真正的用法示例。


编辑:

我发现了一个非常有用的文档,给你,它贯穿于 keygen 标签的客户端和服务器端实现。

我仍然很好奇,与域 SSL 证书相比,这样做有什么好处。

32440 次浏览

如果你正在寻找“确切”,那么我建议你阅读 RFC

keygen元素用于创建用户身份验证的密钥,而 SSL 关心通信的隐私性和服务器的身份验证。引用 RFC 的话:

此规范没有指定如何使用生成的私钥。预计在接收到 SignedPublicKeyAndChallenge (SPKAC)结构之后,服务器将生成一个客户端证书并将其提供给用户下载; 这个证书一旦下载并与私钥一起存储在密钥库中,就可以用于对使用 TLS 的服务进行身份验证和证书身份验证。

SSL 是关于“服务器身份验证”或“服务器与客户端身份验证(相互身份验证)”。

在大多数情况下,只有服务器在 SSL 握手过程中显示它的服务器证书,这样您就可以确保这确实是您希望连接到的服务器。在某些情况下,服务器还希望验证 是否真的是您假装的那个人。为此,您需要客户证书。

<keygen>标记生成一个公钥/私钥对,然后创建一个证书请求。此证书请求将发送到证书颁发机构(CA)。CA 创建一个证书并将其发送回浏览器。现在您可以使用此证书进行用户身份验证。

你错过了一些历史。keygen最初是由 Netscape 支持的,当时它还是一个相关的浏览器。IE,OTOH,通过它的 ActiveX API 支持相同的用例。Opera 和 WebKit (甚至是 KHTML)不愿意对整个 Win32API 进行逆向工程,而是对 keygen进行逆向工程。

它是在 Web Forms 2.0(现在已经合并到 HTML 规范中)中指定的,以提高实现它的浏览器之间的互操作性。

从那时起,IE 团队重申他们拒绝实现 keygen,并且规范(为了避免变成枯燥的科幻小说)已经被修改为不需要实际的实现:

注意: 本规范不包括 指定用户代理的键类型 支持ーー对用户来说是可能的 代理不支持任何键类型 所有。

简而言之,这不是一个新元素,除非你可以忽略 IE,否则它可能不是你想要的。

文档有助于详细说明 keygen 元素是什么。它的需求出现在 WebID 中,可能被理解为 https://dvcs.w3.org/hg/WebID/raw-file/tip/spec/index-respec.html#creating-a-certificate2.1.1中所看到的关联数据语义 Web 的一部分

这可能对提供服务的网站有用,人们需要为这些服务付费,比如视频点播,或者像彭博社这样的专业人士的新闻网站。有了这个键,人们只能在他们的计算机上看内容,而不能在同步计算机上看!您决定如何存储和处理数据。可以指定一个。毒蛇或者。Php 文件,该文件将接收变量,您的文件将在用户配置文件中存储该密钥。这样,如果需要,您的用户将无法从其他计算机登录。你可以强迫他们检查他们的电子邮件来授权那台新电脑,就像蒸汽机一样。基本上,它允许个性化服务访问,如果您的许可模式是每台机器,如操作系统。

你可以在这里查看规格: Http://www.w3.org/tr/html-markup/keygen.html

反对

这个特性已经从 Web 标准中移除了 浏览器可能仍然支持它,它正在被删除的过程中。 尽可能避免使用它并更新现有代码 这个特性可能在任何时候停止工作。

来源