OpenSSL

添加注释

用户贡献的注释 2 个注释

65
bdh dot hall at gmail dot com
15 年前
我很难找到关于使用私钥/公钥系统进行异步加密/解密的帮助,而我需要它来创建使用循环计费的信用卡模块。

你要是用普通的“同步”或双向加密,那真是傻了,所以整个 mcrypt 库都不会有用。

但事实证明,OpenSSL 非常容易使用……但是它的文档非常少,以至于看起来它会难以置信地难用。

所以我就把我一天的破解成果分享给大家——希望对你有用!

<?php

if (isset($_SERVER['HTTPS']) )
{
echo
"SECURE: 此页面通过安全连接访问。<br><br>";
}
else
{
echo
"UNSECURE: 此页面通过不安全连接访问。<br><br>";
}

// 创建密钥对
$res=openssl_pkey_new();

// 获取私钥
openssl_pkey_export($res, $privatekey);

// 获取公钥
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];

echo
"私钥:<BR>$privatekey<br><br>公钥:<BR>$publickey<BR><BR>";

$cleartext = '1234 5678 9012 3456';

echo
"明文:<br>$cleartext<BR><BR>";

openssl_public_encrypt($cleartext, $crypttext, $publickey);

echo
"密文:<br>$crypttext<BR><BR>";

openssl_private_decrypt($crypttext, $decrypted, $privatekey);

echo
"解密后的文本:<BR>$decrypted<br><br>";
?>

感谢文档中其他贡献者让这一过程不那么痛苦。

请注意,您需要使用这些函数来生成一次密钥 - 将您的私钥离线保存以进行解密,并将您的公钥放在您的脚本/配置文件中。如果您的数据被泄露,您无需担心加密后的内容或公钥,真正重要的是私钥和明文。

祝你好运!
-4
koen dot thomeer at pubmed dot be
15 年前
要使用 OCSP 检查客户端证书的状态,您可以使用此脚本

<?php
// 用户变量:
$dir = '/path/to/temp/'; // Apache 可访问的目录 (chmod 777)。
$RootCA = '/path/to/Root.cer'; // 指向 PEM 格式的根 CA。
$OCSPUrl = 'http://ocsp.url'; // 指向 OCSP URL
// 脚本:
$a = rand(1000,99999); // 如果您在一秒钟内预计会有更多页面点击,则需要此项!
file_put_contents($dir.$a.'cert_i.pem', $_SERVER['SSL_CLIENT_CERT_CHAIN_0']); // 发行人证书。
file_put_contents($dir.$a.'cert_c.pem', $_SERVER['SSL_CLIENT_CERT']); // 客户端 (身份验证) 证书。
$output = shell_exec('openssl ocsp -CAfile '.$RootCA.' -issuer '.$dir.$a.'cert_i.pem -cert '.$dir.$a.'cert_c.pem -url '.$OCSPUrl);
$output2 = preg_split('/[\r\n]/', $output);
$output3 = preg_split('/: /', $output2[0]);
$ocsp = $output3[1];
echo
"OCSP 状态:".$ocsp; // 将为 "良好"、"已吊销" 或 "未知"
unlink($dir.$a.'cert_i.pem');
unlink($dir.$a.'cert_c.pem');
?>

它可以改进,但这只是一个开始!

通常,您可以从客户端证书中提取 ocsp url。此外,OCSP 请求仅包含发行人名称的哈希、发行人密钥的哈希以及客户端证书的序列号。所有这三个都可以直接从客户端证书中提取。
To Top