openssl 签名和验签不符的几个原因

阅读更多

先附上签名的代码

 

$privateKeyFile = '/data/private.pem';
$password = '123456';
$privateKey = file_get_contents($privateKeyFile);	
$pKeyId = openssl_pkey_get_private($privateKey, $password);
openssl_sign($xmlSignSrc, $signature, $pKeyId);
openssl_free_key($pKeyId);
$signature = bin2hex($signature);

 

先附上验签的代码

 

	public function verifyStr($orgStr,$signature){
		echo '签名原文:'.$orgStr;
		$pubKeyId = openssl_get_publickey(file_get_contents($certFile));
		$flag = (bool) openssl_verify($orgStr, hex2bin($signature), $pubKeyId);
		openssl_free_key($pubKeyId);
		
		if ($flag) {
			echo '
Verified: SUCC.'; return TRUE; } else { echo '
Verified: Failed.'; return FALSE; } }

 

生成私钥

openssl genrsa -out rsa_private_key.pem 1024

 

生成公钥

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

 

 

首先要保证证书是 pem 格式的,用记事本打开如以下格式:


openssl 签名和验签不符的几个原因_第1张图片
 

如果打开的是乱码,说明不是pem格式的证书,要把它转换成 pem 格式,举个例子:如果是 cer 格式,转换命令如下:

openssl x509 -inform DER -in allinpay-pds.cer  -out allinpay-pds.pem

 

如果是 p12 格式证书转换,则有多种可能,得出的是两个稍有不同的代码

 

openssl pkcs12 -clcerts -nokeys -out cer.pem -in 20058100001485304.p12 

openssl 签名和验签不符的几个原因_第2张图片
 
openssl pkcs12 -clcerts -nodes -out cer.pem -in 20058100001485304.p12

openssl 签名和验签不符的几个原因_第3张图片
 
如果PHP版本低于 php 5.4.1 ,请用 hextobin 替代 hex2bin 函数

具体证书转换流程,可借助搜索引擎研究下。另外,验签出错可能还和你的域名有关

 

补充点SSL证书的知识:https://help.aliyun.com/knowledge_detail/42216.html

  • openssl 签名和验签不符的几个原因_第4张图片
  • 大小: 220.5 KB
  • openssl 签名和验签不符的几个原因_第5张图片
  • 大小: 33.1 KB
  • openssl 签名和验签不符的几个原因_第6张图片
  • 大小: 55.6 KB
  • 查看图片附件

你可能感兴趣的:(openssl)