cer证书,p12证书相关

最近做银联手机充值的一套东西,客户端服务器端一起做,好累呀。对方给了两个 证书,A.p12 和 B.cer。A.p12中的私钥很容易可以得到,但是B.cer中的公钥却怎么都拿不到,害我查了大半天。。。

原来 .p12中也有公钥。。。。


从p12中取密钥:

$p12cert = array();
		$file = "cert/A.p12";
		$fd = fopen($file, 'r');
		$p12buf = fread($fd, filesize($file));
		fclose($fd);

openssl_pkcs12_read($p12buf, $p12cert, password) ;
然后取就可以了。。


说说从a.cer中取公钥,这还是同事帮忙查到的。

其实就是做了一下编码转换而已。。。。

cer证书是二进制编码的,所以获取到它的内容后做次转码就可以啦。

cer证书由p12导出(只不过cer是二进制,p12是base64,可以网上查der(二进制)转pem(base64)),导出命令:

keytool -export -alias p12client -keystore dlt.p12 -storetype PKCS12 -storepass 密码 -rfc -file p12.cer


读取cer公钥如下所示:

function pem2der($pem_data) {
  $begin = "KEY-----";
  $end   = "-----END";
  $pem_data = substr($pem_data, strpos($pem_data, $begin)+strlen($begin));
  $pem_data = substr($pem_data, 0, strpos($pem_data, $end));
  $der = base64_decode($pem_data);
  return $der;
}

function der2pem($der_data) {
  $pem = chunk_split(base64_encode($der_data), 64, "\n");
  $pem = "-----BEGIN PUBLIC KEY-----\n".$pem."-----END PUBLIC KEY-----\n";
  return $pem;
}

$file = "898000000000001.cer";
$fd = fopen($file, 'r');
$p12buf = fread($fd, filesize($file));
var_dump(der2pem($p12buf));-----------------------:这里调用 der2pem 、pem2der 都可以,两种方式。


明天还要加油干活!

你可能感兴趣的:(php)