我有以下公钥:
-----BEGIN RSA PUBLIC KEY-----
... key ...
-----END RSA PUBLIC KEY-----
PHP无法使用该公钥。我发现它应该是x509格式才能在php中使用。是否可以将此密钥转换为x509格式?据我所知,结果应该如下:
-----BEGIN PUBLIC KEY-----
... changed? key ...
-----END PUBLIC KEY-----
UPD:确实有必要生成x509证书,而不仅仅是公钥。
答案 0 :(得分:1)
phpseclib, a pure PHP RSA library,可以使用该格式的RSA密钥。
也就是说,关于openssl,你是对的 - 需要将RSA公钥封装在X.509证书中,以便与大多数openssl_ *函数一起使用。
来自phpseclib interoperability documentation:
// openssl_get_publickey() only creates public key resources from X.509
// certificates hence our creating one
$dn = array(); // use defaults
$res_privkey = openssl_pkey_get_private($privkey);
$res_csr = openssl_csr_new($dn, $res_privkey);
$res_cert = openssl_csr_sign($res_csr, null, $res_privkey, 365);
openssl_x509_export($res_cert, $str_cert);
$res_pubkey = openssl_get_publickey($str_cert);
那说结果不应该像你发布的那样,而是像这样:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----