【发布时间】:2021-03-04 07:34:36
【问题描述】:
我使用 Java 创建了一个 P8 格式的私钥和签名数据,并尝试使用 PHP 中的公钥验证它失败了。
我使用 openssl 命令创建了 p8 文件
openssl pkcs8 -topk8 -inform PEM -outform DER -in myprivate.in.key -out myprivate.in.key.p8 -nocrypt
并使用
签署了一个Json数据public byte[] sign(String data, String privateKeyFilePath) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, IOException, SignatureException {
byte[] returnVal = null;
Signature signature = Signature.getInstance(RSA_SHA_256);
PrivateKey privateKey = getPrivateKey(privateKeyFilePath);
signature.initSign(privateKey);
signature.update(data.getBytes());
returnVal = signature.sign();
return returnVal;
}
但是当我尝试使用 openssl 命令在 PHP 中使用公共证书验证它时,它失败了
$cert_path = file_get_contents(storage_path('certificates/my_in.cer'));
$pub_key = openssl_get_publickey($cert_path);
$keyData = openssl_pkey_get_details($pub_key);
$pub_key = $keyData['key'];
// $verify = openssl_x509_verify()
$verify = openssl_verify($dataSigned, $signatureDecoded, $pub_key, 'sha256WithRSAEncryption');
我做错了什么,还有一种方法可以在 php 中使用 p8 密钥对数据进行签名!
【问题讨论】: