openssl_spki_verify

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

openssl_spki_verify验证已签名的公钥和质询

说明

openssl_spki_verify(string $spki): bool

验证提供的已签名的公钥和质询

参数

spki

预期是一个有效的已签名的公钥和质询

返回值

成功时返回 true,失败时返回 false

错误/异常

如果通过 spki 参数传递无效参数,则发出 E_WARNING 级别的错误。

示例

示例 #1 openssl_spki_verify() 示例

验证现有的已签名的公钥和质询

<?php
$pkey
= openssl_pkey_new('secret password');
$spkac = openssl_spki_new($pkey, 'challenge string');

if (
openssl_spki_verify(preg_replace('/SPKAC=/', '', $spkac))) {
echo
$spkac;
} else {
echo
"SPKAC validation failed";
}
?>

示例 #2 openssl_spki_verify() 从 <keygen> 中的示例

验证从 <keygen> 元素发出的现有的已签名的公钥和质询

<?php
if (openssl_spki_verify(preg_replace('/SPKAC=/', '', $_POST['spkac']))) {
echo
$spkac;
} else {
echo
"SPKAC validation failed";
}
?>
<keygen name="spkac" challenge="challenge string" keytype="RSA">

参见

添加注释

用户贡献的注释 2 个注释

3
carloshlfzanon at gmail dot com
7 年前
这些 openssl_spki_* 函数对于在 html5 中使用 <keygen/> 标签非常有用。

示例

<?php
session_start
();

// 表单提交了... (?)
if(isset($_POST['security']))
{
// 如果为真,则从 <keygen/> 发送的是有效的,并且可以
// 测试质询
if(openssl_spki_verify($_POST['security']))
{
// 获取质询字符串
$challenge = openssl_spki_export_challenge($_POST['security']);

// 如果为真... 您没有试图欺骗它。
// 如果用户打开两个窗口以防止数据因“错误”而丢失,或者他只是按下“后退”按钮
// 并重新发送最后的数据... 可以使用类似的东西来处理它。
if($challenge == $_SESSION['lastForm'])
{
echo
'Ok, this one is valid.', '<br><br>';
}
else
{
echo
'Nice try... nice try...', '<br><br>';
}
}

}

// 如果打开两个窗口,质询将不匹配!
$_SESSION['lastForm'] = hash('md5', microtime(true));

?>

<!DOCTYPE html>
<html>
<body>

<form action="/index.php" method="post">
加密:<keygen name="security" keytype="rsa" challenge="<?php echo $_SESSION['lastForm']; ?>"/>
<input type="submit">
</form>

</body>
</html>
0
neat at neato dot com
4 年前
质询不是如何验证“欺骗”。它用作一种部分不可否认方法。

这个想法是,质询可以从 'keygen' 元素提供的 base64 编码的 ASN.1 PKCS#1 位中提取出来。

SPKAC 是一种 CSR,如果具有正确的信息,例如 commonName、emailAddress、countryName、stateOrProvinceName、localityName 等,可以生成签名的 x509 并提供给请求者。

然后将其安装在浏览器中,如果 Web 服务器配置为接受客户端 x509 证书,则它将用于代替密码进行身份验证。

建议将 'challenge' 用作一种不可否认形式,以防其他人使用您的键盘。如果应用程序需要它,它可以提示您输入质询,并将其与在初始 SPKAC 过程中存储的哈希版本进行比较。

希望这有助于澄清。
To Top