欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-11 13:18:17
...

先附上签名的代码

 

$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 '<br/>Verified: <font color=red>SUCC</font>.';
		    return TRUE;
		} else {
		    echo '<br/>Verified: <font color=red>Failed</font>.';
		    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 签名和验签不符的几个原因
            
    
    博客分类: 开发 openssl 
 

如果打开的是乱码,说明不是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 签名和验签不符的几个原因
            
    
    博客分类: 开发 openssl 
 
openssl pkcs12 -clcerts -nodes -out cer.pem -in 20058100001485304.p12

openssl 签名和验签不符的几个原因
            
    
    博客分类: 开发 openssl 
 
如果PHP版本低于 php 5.4.1 ,请用 hextobin 替代 hex2bin 函数

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

 

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

  • openssl 签名和验签不符的几个原因
            
    
    博客分类: 开发 openssl 
  • 大小: 220.5 KB
  • openssl 签名和验签不符的几个原因
            
    
    博客分类: 开发 openssl 
  • 大小: 33.1 KB
  • openssl 签名和验签不符的几个原因
            
    
    博客分类: 开发 openssl 
  • 大小: 55.6 KB
相关标签: openssl