在PHP中如何获得CSR的公钥?

时间:2011-11-03 09:50:43

标签: php openssl x509 csr

我有一个网页,它接受CSR(证书签名请求)并签名。问题是:我不知道如何从CSR中提取公钥。我试过openssl_csr_get_public_key($request),其中request是持有pem编码请求的字符串,但这似乎不起作用。关于如何做到这一点的任何想法?

谢谢!

3 个答案:

答案 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是否没有改变空间或类似的东西。