很多朋友不太清楚HTML5里面的<keygen>标签的应用场景,在这里说一下我个人对这个标签的理解。
首先<keygen>标签会生成一个公钥和私钥,私钥会存放在用户本地,而公钥则会发送到服务器。那么<keygen>标签生成的公钥/私钥是用来做什么用的呢?很多朋友在看到公钥/私钥的时候,应该就会想到了非对称加密。没错,<keygen>标签在这里起到的作用也是一样。
<keygen>标签所期望的是在收到SPKAC(SignedPublicKeyAndChallenge)排列后,服务器会生成一个客户端证书(Client Certificate),然后返回到浏览器让用户去下载保存到本地。之后,用户在需要验证的时候,使用本地存储的私钥和证书后通过TLS/SSL安全传输协议到服务端做验证。
以下是使用<keygen>标签的益处:
1. 一个是可以提高验证时的安全性;
2. 同时如果是作为客户端证书来使用,可以提高对MITM攻击的防御力度;
3. keygen标签是跨越浏览器实现的,实现起来非常容易;
4. 另外就是可以不用考虑操作系统的管理员权限问题。例如操作系统对不同用户设置了不同的浏览器权限,IE或者其他浏览器可以在设置里面禁用key的生成,这种情况下,可以通过keygen标签来生成和使用没有误差的客户端证书。
那么<keygen>标签就没有不好的地方了么?当然不是,相反,<keygen>标签的不足之处有很多:
1. 证书(Certificates)在不同的系统里不是容易方便的(但是对于某些系统,这又是一个优势)。
-
2. 没有在一个标准的位置存储私钥。
-
3. 在html页面看到<keygen>标签生成的内容总是让人困惑和难以理解。
-
4. <keygen>标签会让用户从一个列表里选择适当的key,但是大多数用户不知道该如何选择。
-
5. 很多用户并不清楚是否该根据提示下载证书(Certificate)。
- 6. <keygen>标签不提供一个能管理证书让其失效的机制。
- 7. 没有标准的key长度或者hash来实现浏览器无关性。
- 8. 不支持算法(RSA, DSA, ECC等)。
- 9. key的大小选择只能来源于<keygen>标签生成的表单内容,而不是用户可以选择的。
-
10. 签名只能基于MD5,而不能使用其他的加密算法。
- 11. <keygen>标签没有“不可输出(Non-Exportable)”的提示。(这里的标记我没有搞明白是什么作用。)
- 12. <keygen>标签没有“硬件保护(Hardware protected)”的标记。(这里的标记我没有搞明白是什么作用。)
- 13. <keygen>标签没有采取不可见的保护,类似于密码框。
- 14. 证书(Certificate)受限与只有基于RSA的应用程序。
- 15. 可以修改<keygen>标签生成的本地的表单内容,从而直接降低了key的安全成。
- 16. 如果加入微软的认证服务器(Microsoft Certificate Server),只能通过DCOM API的方式,并且支持"server"的证书类型。
- 17. <keygen>标签生成的内容没有使用标准格式,并且只支持已有协议的一部分,例如PKCS10,CMC和CRMF。
相关推荐
其次,HTML5提供了更好的表单控制,新增了诸如<output>、<datalist>、<keygen>和<details>等元素,以及更强大的输入类型,如date、email、url等,这使得用户界面更加友好,数据验证也更为方便。 此外,HTML5支持...
DOCTYPE html>`声明、`<html>`标签、`<head>`和`<body>`部分。 - `<!DOCTYPE html>`:声明文档类型为HTML5。 - `<html>`:文档根元素。 - `<head>`:包含元信息,如字符集、标题、样式表链接等。 - `<body>`:...
HTML5在表单处理方面有了显著改进,提供了新的输入类型(如date、email、url、search等),增强了表单验证功能,以及新的表单控件如<output>、<datalist>、<keygen>和<progress>。这些改进让表单更易于使用且功能更...
- HTML5引入了许多新的语义标签,如`<audio>`、`<canvas>`、`<command>`、`<datalist>`、`<details>`、`<dialog>`、`<embed>`、`<keygen>`、`<mark>`、`<meter>`、`<output>`、`<progress>`、`<rp>`、`<rt>`、`...
3. 表单控制:HTML5对表单元素进行了增强,新增了<input type="date">、<input type="email">等类型,以及<output>、<datalist>和<keygen>等新元素,使得数据输入和验证更为便捷。 4. 多媒体支持:HTML5不再依赖...
HTML5引入了如<header>、<nav>、<section>、<article>、<aside>、<footer>等结构性元素,这些元素帮助我们更好地组织文档结构,增强语义化,使网页内容更易于理解和解析。 3. 媒体元素: HTML5的<audio>和<video>...
6. **SVG矢量图**:HTML5引入了`<svg>`标签,支持在网页中内嵌矢量图形,这意味着图形可以无限缩放而不会失真,对于图标、图表和其他需要高质量图像的场景非常理想。 7. **Web Workers和Web Storage**:Web Workers...
五、图像格式的区别与应用场景 1. **JPEG(JPG)**:适用于高质量的连续色调图像,如照片,因为它使用有损压缩,可以显著减小文件大小,但可能会丢失一些细节。不支持透明度。 2. **GIF**:支持透明度和动画,适合简单...
五、图像格式的区别及应用场景 1. **JPEG(JPG)**:不支持透明,适用于照片或色彩丰富的图像,因为它使用有损压缩,降低文件大小但可能产生视觉上的质量损失。 2. **GIF**:支持透明和动画,适用于简单图形、图标和...
5. `<command>` 标签:用于定义命令按钮,但其实际应用并不广泛,可能需要结合JavaScript来实现特定功能。 6. `<datalist>` 标签:用于创建选项列表,与`<input>`标签配合使用,提供下拉选择建议,常见于输入框的...
HTML5对表单元素进行了增强,新增了诸如<output>、<datalist>、<keygen>、<input type="date">等元素,以及属性如required、placeholder、pattern等,提高了表单验证和用户体验。 6. 存储机制 HTML5引入了两种离线...
1. **语义化元素**:HTML5引入了更多具有明确语义的标签,如<header>、<footer>、<nav>、<article>和<section>等,这些元素有助于提高网页内容的可读性和可访问性,同时让代码结构更加清晰。 2. **Canvas绘图**:...
最后,提到的websocket是建立在TCP连接上的双向通信协议,允许浏览器和服务器之间进行实时双向通信,非常适合需要高实时性的应用场景。 通过以上内容,我们可以看到前端技术的广泛性和深入性,面试者在准备前端面试...
- `<source>`标签在`<audio>`和`<video>`中用于指定不同格式的媒体源,浏览器会选择最合适的格式播放。 2. **客户端存储**: - `localStorage`允许网站在用户的浏览器中永久存储数据,即使关闭浏览器后数据仍然...
在结构方面,HTML5引入了新的语义化标签,如`<header>`、`<footer>`、`<article>`、`<section>`等,这些标签有助于提高网页的可读性和可访问性,让搜索引擎和屏幕阅读器更好地理解网页内容的结构。 Web Storage是...
此外,`<keygen>`元素虽然在HTML5中已废弃,但它曾经用于生成公钥/私钥对,适用于SSL证书等应用场景。 为了提高用户体验,一些现代网站还采用了两步验证或多因素认证(MFA)。这种认证方法要求用户提供除了密码之外...
- **HTML语义化**指的是使用有意义的HTML标签来构建页面结构,使得内容更具可读性和易维护性,同时有助于搜索引擎更好地理解和抓取页面内容。例如,使用`<article>`、`<section>`、`<header>`、`<footer>`等标签...
H5 面试汇总(含答案)最新版 本文档总结了前端 H5 常见的面试题及答案,涵盖了 HTML5 的基本概念、语义化、IE ...掌握这些知识点可以帮助我们更好地理解 HTML5 和图片格式的特点,从而更好地应用在实际开发中。
接听电话* TASKER:更改图标集,如果,结束如果,转到操作,执行任务,配置文件切换,查询操作,设置小部件图标,设置小部件标签,停止,等待,等到 *变量:设置,清除,公司,Dec,查询,随机化,拆分,联接,列表...