因此,我在HTML5 <keygen>
中遇到了这个新标记。我无法弄清楚它的用途,应用方式以及它如何影响浏览器行为。
我知道此标记用于表单加密,但<keygen>
与您的域名拥有SSL证书之间的区别是什么。另外,challenge
属性是什么?
我不打算使用它,因为它远远没有在可接受的浏览器范围内实现,但我很好奇这个标签的作用是什么。我所能找到的只是模糊的千篇一律的文档,没有真正的使用示例。
编辑:
我找到了一篇非常翔实的文档,here。这贯穿了keygen标记的客户端和服务器端实现。
我仍然很好奇这对于域SSL证书的好处是什么。
答案 0 :(得分:32)
SSL是关于“服务器标识”或“服务器AND客户端身份验证(相互身份验证)”。
在大多数情况下,只有服务器在SSL握手期间显示其服务器证书,以便您确保这确实是您希望连接到的服务器。在某些情况下,服务器还想验证你是否真的是你假装的那个人。为此,您需要一个客户证书。
<keygen>
标记生成公钥/私钥对,然后创建证书请求。此证书请求将发送到证书颁发机构(CA)。 CA创建证书并将其发送回浏览器。现在,您可以使用此证书进行用户身份验证。
答案 1 :(得分:24)
你错过了一些历史。 Netscape在它仍然是相关浏览器时首先支持keygen
。 IE,OTOH通过其ActiveX API支持相同的用例。 Opera和WebKit(甚至KHTML)不愿意对整个Win32 API进行逆向工程,而是反向设计keygen
。
它是在Web Forms 2.0中指定的(现已合并到HTML规范中),以提高实现它的浏览器之间的互操作性。
此后,IE团队重申拒绝实施keygen
,并且规范(为了避免变成干科幻小说)已经改为不需要实际实施:
注意:此规范没有 指定用户代理的密钥类型 支持 - 对用户来说是可能的 代理不支持任何密钥类型 所有
简而言之,这不是一个新元素,除非你可以忽略IE,否则它可能不是你想要的。
答案 2 :(得分:7)
如果您正在寻找“完全”,那么我建议您阅读RFC。
keygen
元素用于创建用于身份验证的密钥,而SSL则关注通信隐私和服务器身份验证。引用RFC
此规范未指定如何使用生成的私钥。预计在收到SignedPublicKeyAndChallenge(SPKAC)结构后,服务器将生成客户端证书并将其提供给用户进行下载;此证书一旦下载并与私钥一起存储在密钥存储区中,则可用于对使用TLS和证书身份验证的服务进行身份验证。
答案 3 :(得分:4)
答案 4 :(得分:0)
该文档有助于详细说明keygen元素是什么。它的要求出现在WebID中,可以理解为链接数据的语义Web的一部分,见https://dvcs.w3.org/hg/WebID/raw-file/tip/spec/index-respec.html#creating-a-certificate 2.1.1
答案 5 :(得分:-2)
这对于提供服务的网站非常有用,人们需要为这些服务付费,例如视频点播,或者为Bloomberg等专业人士提供新闻网站。使用此键,人们只能在计算机中观看内容,而不能同时观看计算机!您可以决定如何存储和处理数据。您可以指定将接收变量的.asp或.php文件,您的文件将该密钥存储在用户配置文件中。这样,如果需要,您的用户将无法从其他计算机登录。您可以强制他们检查他们的电子邮件以授权新计算机,就像Steam一样。基本上,如果您的许可模型是每台机器,例如操作系统,它允许个性化服务访问。
您可以在此处查看规格: http://www.w3.org/TR/html-markup/keygen.html