该标签在新的 Web 标准中已废弃。
<keygen>标签会生成一个公钥和私钥,私钥会存放在用户本地,而公钥则会发送到服务器。那么<keygen>标签生成的公钥/私钥是用来做什么用的呢?很多朋友在看到公钥/私钥的时候,应该就会想到了非对称加密。没错,<keygen>标签在这里起到的作用也是一样。
<keygen>标签所期望的是在收到SPKAC(SignedPublicKeyAndChallenge)排列后,服务器会生成一个客户端证书(Client Certificate),然后返回到浏览器让用户去下载保存到本地。之后,用户在需要验证的时候,使用本地存储的私钥和证书后通过TLS/SSL安全传输协议到服务端做验证。
以下是使用<keygen>标签的益处:
1. 一个是可以提高验证时的安全性;
2. 同时如果是作为客户端证书来使用,可以提高对MITM攻击的防御力度;
3. keygen标签是跨越浏览器实现的,实现起来非常容易;
4. 另外就是可以不用考虑操作系统的管理员权限问题。例如操作系统对不同用户设置了不同的浏览器权限,IE或者其他浏览器可以在设置里面禁用key的生成,这种情况下,可以通过keygen标签来生成和使用没有误差的客户端证书。
keygen 标签
keygen 元素的作用是提供一种验证用户的可靠方法。
keygen 元素是密钥对生成器(key-pair generator)。当提交表单时,会生成两个键,一个是私钥,一个公钥。
私钥(private key)存储于客户端,公钥(public key)则被发送到服务器。公钥可用于之后验证用户的客户端证书(client certificate)。
目前,浏览器对此元素的糟糕的支持度不足以使其成为一种有用的安全标准。
keygen 标签实例 1
<form action="/demo_form.html" method="get">
Username: <input type="text" name="usr_name" />
Encryption: <keygen name="security" />
<input type="submit" />
</form>
keygen 标签实例2
带有 keygen 字段的表单:
<form action="demo_keygen.asp" method="get">
用户名: <input type="text" name="usr_name">
加密: <keygen name="security">
<input type="submit">
</form>
浏览器支持
Firefox、Opera、Chrome 和 Safari 6 都支持 <keygen> 标签。
标签定义及使用说明
<keygen> 标签规定用于表单的密钥对生成器字段。
当提交表单时,私钥存储在本地,公钥发送到服务器。
HTML 4.01 与 HTML5之间的差异
<keygen> 元素是 HTML5 新标签。
New:HTML5 新属性。
属性 | 值 | 描述 |
---|
autofocusNew | autofocus | 使 <keygen> 字段在页面加载时获得焦点。 |
challengeNew | challenge | 如果使用,则将 keygen 的值设置为在提交时询问。 |
disabledNew | disabled | 禁用 <keygen> 元素字段。 |
formNew | form_id | 定义该 <keygen> 字段所属的一个或多个表单。 |
keytypeNew | rsa dsa ec | 定义密钥的安全算法。 |
nameNew | name | 定义 <keygen> 元素的唯一名称。 name 属性用于在提交表单时搜集字段的值。 |
<keygen> 标签支持全局属性,查看完整属性表 HTML全局属性.
<keygen> 标签支持所有 HTML事件属性.