16

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

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

拿到公钥后应该怎么做?

有人可以给我使用<keygen>并进行身份验证的示例应用程序吗?

4

2 回答 2

8

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

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

<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>
于 2014-06-16T11:26:34.703 回答
5

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

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

于 2013-01-11T17:30:34.263 回答