【问题标题】:Is there a HTML5 keygen example?是否有 HTML5 密钥生成示例?
【发布时间】:2012-07-29 17:22:06
【问题描述】:

我很难理解如何使用<keygen>

我找不到用于身份验证的演示。当我将<keygen> 标签添加到表单时,它会发送公钥。

拿到公钥后应该做什么?

谁能给我一个使用<keygen>并进行身份验证的示例应用程序?

【问题讨论】:

  • 是的,我已经阅读了上面的链接。我的问题是在服务器上生成证书并将其发回以进行用户身份验证。我正在寻找使用 keygen 公钥生成证书的完整示例
  • 那么你会看到:这个规范没有指定如何使用生成的私钥。预计服务器收到SignedPublicKeyAndChallenge(SPKAC)结构后,会生成客户端证书并提供给用户下载;此证书一旦与私钥一起下载并存储在密钥库中,就可以用于对使用 TLS 和证书身份验证的服务进行身份验证。
  • whatwg 列表似乎已关闭,但已存档:archive.is/WnBdK

标签: html


【解决方案1】:

我的解释来自这个 PHP/Apache example。这是一个简化的解释,请查看原始示例以获得完整的详细信息。

客户端为服务器生成一个公钥并保留一个私钥。

<form>
   <keygen name="pubkey" challenge="randomchars">
   <input type="submit" name="createcert" value="Generate">
</form>

公钥由服务器提取:

$key = $_REQUEST['pubkey'];

服务器建立客户端证书:

$command = "/usr/bin/openssl ca -config ".$opensslconf." -days ".$days." -notext -batch -spkac ".$certfolder.$uniq.".spkac -out ".$certfolder.$uniq." -passin pass:'".$capw."' 2>&1";
$output = shell_exec($command);

并将其发送回客户端。

然后您可以配置 Apache 以允许访问经过身份验证的客户端:

SSLEngine on
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/CA/certs-pub/domain.der
SSLCertificateKeyFile /etc/CA/certs-priv/domain.pem
SSLCACertificateFile /etc/CA/certs-pub/ca.pem
SSLCARevocationFile /etc/CA/crl/cacrl.pem
<Location /secure_area/>
  SSLVerifyClient require
  SSLVerifyDepth 1
</Location>

【讨论】:

  • 未来读者请注意:您不应该执行未经处理的用户输入的命令。他们可能会危及您的服务器
【解决方案2】:

Mozilla 在这里有一些工作示例:

https://developer.mozilla.org/en-US/docs/HTML/Element/keygen

【讨论】:

  • 请注意它已被弃用并同时删除
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2013-04-07
  • 2015-04-01
  • 2013-02-26
相关资源
最近更新 更多