【发布时间】:2011-12-21 00:42:12
【问题描述】:
我有一个网页,它接受 CSR(证书签名请求)并对其进行签名。问题是:我不知道如何从 CSR 中提取公钥。我尝试了openssl_csr_get_public_key($request),其中 request 是保存 pem 编码请求的字符串,但这似乎不起作用。关于如何做到这一点的任何想法?
谢谢!
【问题讨论】:
我有一个网页,它接受 CSR(证书签名请求)并对其进行签名。问题是:我不知道如何从 CSR 中提取公钥。我尝试了openssl_csr_get_public_key($request),其中 request 是保存 pem 编码请求的字符串,但这似乎不起作用。关于如何做到这一点的任何想法?
谢谢!
【问题讨论】:
我发现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 访问您想要的任何内容!
【讨论】:
您不想签署公钥本身,而是签署 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 进行。
【讨论】:
确保 csr 格式正确。检查 PHP 是否没有将加号更改为空格或类似的东西。
【讨论】: