我有一个网页,它接受CSR(证书签名请求)并签名。问题是:我不知道如何从CSR中提取公钥。我试过openssl_csr_get_public_key($request)
,其中request是持有pem编码请求的字符串,但这似乎不起作用。关于如何做到这一点的任何想法?
谢谢!
答案 0 :(得分:2)
我发现phpseclib's pure PHP CSR implementation通常更具“容错能力”。例如
<?php
include('File/X509.php');
$x509 = new File_X509();
$csr = $x509->loadCSR('...'); // see google.crt
print_r($sr);
?>
有了这个,您应该能够从CSR中访问任何您想要的东西!
答案 1 :(得分:1)
您不希望签署公钥本身,但CSR,即签名包括CSR中的元数据,该元数据也与公钥一起签名。
PHP命令是
openssl_csr_sign
为了使其工作,您需要一个CSR(由客户端提供)和一个CAcert文件(从服务器上的文件加载并作为字符串传递给您的命令)。要生成后者,请查看此处:http://www.openssl.org/docs/apps/ca.html(官方)和此处(如何)http://www.freebsdmadeeasy.com/tutorials/freebsd/create-a-ca-with-openssl.php
显然,如果你是一个“真正的”CA - 例如您拥有由其他人信任的CA签署的证书 - 那么您已经拥有证书(由他们签名)。
一般来说,签署他人提供的公钥不是好习惯。您要做的是要求您的客户提供CSR元数据,然后为它们生成密钥,同时返回私钥和证书 - 这可以使用PKCS 12格式完成(请参阅openssl_pkcs12_export
- 整个交易所应通过SSL进行。
答案 2 :(得分:0)
确保csr格式正确。检查PHP是否没有改变空间或类似的东西。