2

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

谢谢!

4

3 回答 3

2

我发现phpseclib 的纯 PHP CSR 实现通常更“容错”。例如。

<?php
include('File/X509.php');

$x509 = new File_X509();
$csr = $x509->loadCSR('...'); // see google.crt

print_r($sr);
?>

有了它,您应该能够从 CSR 访问您想要的任何内容!

于 2013-04-18T20:20:38.387 回答
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 发生。

于 2011-11-03T11:49:08.853 回答
0

确保 csr 格式正确。检查 PHP 是否没有将加号更改为空格或类似的东西。

于 2011-11-04T10:50:52.640 回答