keygen

<keygen>

已废弃

该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。

HTML <keygen> 元素是为了方便生成密钥材料和提交作为HTML form 的一部分的公钥.这种机制被用于设计基于 Web 的证书管理系统。按照预想,<keygen> 元素将用于 HTML 表单与其他的所需信息一起构造一个证书请求,该处理的结果将是一个带有签名的证书。

Web浏览器制造商目前正在讨论是否保留这个功能。在达成决定之前,最好继续将此功能视为已弃用或消失。

内容类别流量内容,措辞内容,互动内容,列出,可引用,可提交,可重置的表格相关元素,可触及的内容。
允许的内容没有,这是一个空的元素。
标记遗漏必须有开始标签,并且不得有结束标签。
允许父母任何接受短语内容的元素。
允许ARIA角色没有
DOM界面HTMLKeygenElement

属性

这个元素包含全局属性。

autofocus这个布尔属性可以让你指定当页面加载时控件应该有输入焦点,除非用户覆盖它,例如通过输入不同的控件。文档中只有一个表单元素可以具有autofocus属性,这是一个布尔值。

元素写成如下:

<keygen name="name" challenge="challenge string" keytype="type" keyparams="pqg-params">

keytype参数用于指定要生成哪种类型的密钥。有效值是“ RSA”,这是默认值,“ DSA”和“ EC”。将namechallenge属性都需要在所有情况下。该keytype属性对于RSA密钥生成是可选的,并且对于生成DSAEC密钥是必需的。

对于RSA密钥,keyparams不使用该参数(如果存在则忽略)。用户可以被给予RSA关键优势的选择。目前,用户被给予“高”强度(2048比特)和“中等”强度(1024比特)之间的选择。

对于DSA密钥,keyparams参数指定将在keygen过程中使用的DSA PQG参数。pqg参数的值是IETF RFC 3279中规定的BASE64编码的DER编码的Dss-Parms 。用户可以选择DSA密钥大小,允许用户选择DSA标准中定义的大小之一。

对于EC密钥,keyparams参数指定将在其上生成密钥的椭圆曲线的名称。它通常是nsKeygenHandler.cpp中的表中的一个字符串。(请注意,在任何特定的浏览器中,只有名为的曲线的子集可能实际上受支持。)如果keyparams参数字符串不是可识别的曲线名称字符串,则根据用户选择的关键强度(低,中,高),使用名为“ secp384r1” 的曲线为高,曲线名为“ secp256r1”为中等键。(注意:关键强度数量的选择,每个强度的默认值,以及用户提供选择的UI都超出了本规范的范围。)

<keygen>元素仅在HTML表单中有效。这将导致某种选择被呈现给用户以选择密钥大小。用于选择的UI可以是菜单,单选按钮或可能的其他东西。浏览器提供了几个可能的关键优势。目前,有两个优势,高和中。如果用户的浏览器被配置为支持加密硬件(例如“智能卡”),则用户也可以选择在何处生成密钥,即在智能卡中或软件中并存储在磁盘上。

当按下提交按钮时,会生成所选尺寸的密钥对。私钥被加密并存储在本地密钥数据库中。

PublicKeyAndChallenge ::= SEQUENCE { spki SubjectPublicKeyInfo, challenge IA5STRING } SignedPublicKeyAndChallenge ::= SEQUENCE { publicKeyAndChallenge PublicKeyAndChallenge, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING }

公钥和挑战字符串是DER编码的PublicKeyAndChallenge,然后用私钥进行数字签名产生一个SignedPublicKeyAndChallengeSignedPublicKeyAndChallenge是Base64编码,该ASCII数据最终提交到服务器作为一种形式的名称/值对的值,其中由指定的名称是名称name的属性keygen元素。如果没有提供挑战字符串,那么它将被编码为IA5STRING长度为零的字符串。

下面是一个表单提交的示例,它将通过HTTP服务器传递给CGI程序:

commonname=John+Doe&email=doe@foo.com&org=Foobar+Computing+Corp.& orgunit=Bureau+of+Bureaucracy&locality=Anytown&state=California&country=US& key=MIHFMHEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAnX0TILJrOMUue%2BPtwBRE6XfV%0AWtKQbsshxk5ZhcUwcwyvcnIq9b82QhJdoACdD34rqfCAIND46fXKQUnb0mvKzQID%0AAQABFhFNb3ppbGxhSXNNeUZyaWVuZDANBgkqhkiG9w0BAQQFAANBAAKv2Eex2n%2FS%0Ar%2F7iJNroWlSzSMtTiQTEB%2BADWHGj9u1xrUrOilq%2Fo2cuQxIfZcNZkYAkWP4DubqW%0Ai0%2F%2FrgBvmco%3D

示例

规范

规范状态评论
HTML生活标准该规范中'<keygen>'的定义。生活水平
HTML5该规范中'<keygen>'的定义。建议

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support(Yes) — 57(Yes)1No3.01.2

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes) — 57(Yes) — 57(Yes)1No?No