php 校验csr与key,SSL:将私钥与使用PHP的证书进行匹配(不含phpseclib)

这篇博客探讨了如何在PHP中使用OpenSSL扩展来检查SSL证书与私钥是否匹配的问题。作者提供了PHP脚本示例,该脚本尝试通过shell_exec命令导出并比较SSL证书和私钥的哈希值。然而,遇到了即使私钥和证书不匹配,检查结果也会显示匹配的错误。作者尝试了不同的shell_exec命令组合,包括使用sha256sum和openssl md5,但结果始终未能正确反映出匹配状态。
摘要由CSDN通过智能技术生成

我尝试使用此PHP脚本检查SSL证书匹配的SSL私钥,或者每次都检查结果是否匹配。SSL:将私钥与使用PHP的证书进行匹配(不含phpseclib)

error_reporting(E_ALL & ~E_NOTICE);

if (!extension_loaded('OpenSSL')) {

$this->markTestSkipped("Need OpenSSL extension");

}

$pkey = "-----BEGIN PRIVATE KEY-----

MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvwT54v2kQTRP3

ZnJepfuBgEUfrEqBZ7zLm87s1NHwwJNNbwqGCYTIoCv4xDgRCK7X7NVmMyV2OWIn

...

-----END PRIVATE KEY-----";

$cert = "-----BEGIN CERTIFICATE-----

MIIGRTCCBS2gAwIBAgIQVWcnF+whEw+mvnBlp/JMCzANBgkqhkiG9w0BAQsFADCB

kDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G

...

-----END CERTIFICATE-----";

$check_result = check_pkey_cert_match($pkey, $cert);

if($check_result == true) {

echo "Match";

} else {

echo "Not Match";

}

此功能使用OpenSSL通过了shell_exec它可以导出文件server.crt这server.key,server.csr

function check_pkey_cert_match($Private_Key, $Certificate) {

//checks if Private Key match Certificate

$random_blurp = rand(10,99999);

$tmp_dir = "/tmp/";

if(openssl_x509_export_to_file($Certificate, $tmp_dir.$random_blurp.'.server.crt')) {

echo "Export Cert OK = ".$tmp_dir.$random_blurp.".server.crt";

} else {

echo "Export Crt Error";

}

if(openssl_pkey_export_to_file($Private_Key, $tmp_dir.$random_blurp.'.server.key')) {

echo "Export Pkey OK = ".$tmp_dir.$random_blurp.".server.key";

} else {

echo "Export Pkey Error";

}

,但是当我用这个了shell_exec进行检查$ pkey_check & $ cert_check匹配或不是每次都会导致匹配。因为$ pkey_check & $ cert_check = NULL

$pkey_check = shell_exec('openssl pkey -in

'.$tmp_dir.$random_blurp.'.server.key -pubout -outform pem | sha256sum');

$cert_check = shell_exec('openssl x509 -in

'.$tmp_dir.$random_blurp.'.server.crt -pubout -outform pem | sha256sum');

// $csr_check = shell_exec('openssl req -in '.$tmp_dir.$random_blurp.'.server.csr -pubout -outform pem | sha256sum');

//remove those temp files.

unlink($tmp_dir.'server.crt');

unlink($tmp_dir.'server_key');

//unlink($tmp_dir.'server.csr');

//Check for match

if ($cert_check == $pkey_check) {

return true;

} else {

return false;

}

上面的脚本

导出证书OK = /tmp/41893.server.crt

出口PKEY OK = /tmp/41893.server的结果。键

cert_check =

pkey_check =

比赛

我尝试另一种了shell_exec但同样resutl

/*

$pkey_check = shell_exec('openssl rsa -noout -modulus -in server.key | openssl md5');

$cert_check = shell_exec('openssl x509 -noout -modulus -in server.crt | openssl md5');

$csr_check = shell_exec('openssl req -noout -modulus -in server.csr | openssl md5');

*/

/*

$pkey_check = shell_exec('openssl rsa -modulus -in '.$tmp_dir.$random_blurp.'.server.key | openssl md5 2>&1');

$cert_check = shell_exec('openssl x509 -modulus -in '.$tmp_dir.$random_blurp.'.server.crt | openssl md5 2>&1');

$csr_check = shell_exec('openssl req -noout -modulus -in '.$tmp_dir.$random_blurp.'.server.csr | openssl md5 2>&1');

*/

$pkey_check = shell_exec('openssl pkey -in '.$tmp_dir.$random_blurp.'.server.key -pubout -outform pem | sha256sum');

$cert_check = shell_exec('openssl x509 -in '.$tmp_dir.$random_blurp.'.server.crt -pubout -outform pem | sha256sum');

// $csr_check = shell_exec('openssl req -in '.$tmp_dir.$random_blurp.'.server.csr -pubout -outform pem | sha256sum');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值