gpt4 book ai didi

php - 生成带有 subjectAltName 扩展名的 CSR

转载 作者:行者123 更新时间:2023-12-05 04:14:45 28 4
gpt4 key购买 nike

我目前正在使用以下代码为其他域生成带有 subjectAltName 的 CSR。

$domains = ["example.com", "www.example.com"];

$san = implode(",", array_map(function ($dns) {
return "DNS:" . $dns;
}, $domains));

$csr = openssl_csr_new([
"CN" => reset($domains),
"ST" => "Germany",
"C" => "DE",
"O" => "Unknown",
"subjectAltName" => $san,
], $privateKey, [
"digest_alg" => "sha256",
"req_extensions" => "v3_req",
]);

但是当我使用 openssl req -text -noout -verify -in csr.pem 来验证生成的 CSR 时,subjectAltName 没有在 下列出请求的扩展 部分。相反,subjectAltName 被添加到主题中。

subjectAltName 在第一个数组中被识别,其他任意值导致错误。但是,我如何使用 OpenSSL 在 PHP 中创建一个 CSR,它真正包含请求扩展的 subjectAltName

这个问题专门针对捆绑的 openssl_* 函数,而不是任何第三方库,例如 phpseclib

最佳答案

自投票以来,我一直在搞乱这个问题,找不到一个优雅的解决方案,但我确实找到了一个可能适合你的解决方法。您可能知道,您可以在 openssl 配置文件中指定替代名称。您还可以在 configArgs 中指定您自己的配置文件到 openssl_csr_new

结合这两者,您可以在运行时在可写目录(如/tmp/)中创建/修改一个 openssl 配置文件,然后告知使用它。

openssl_csr_new 调用中的相关代码如下所示:

"digest_alg" => "sha256",
"req_extensions" => "v3_req",
"config" => "/path/to/config/file" // <-- new line

在配置文件中,您需要设置 v3_req 部分以使用文件中的替代名称,例如

subjectAltName = @test_req

然后(重新)创建 test_req 部分,并用您的 DNS 名称填充它,例如

[ test_req ]
DNS.1 = foo.bar
DNS.2 = foo.baz

如果您需要更多信息,请告诉我。也许其他人可以弄清楚如何将它直接塞进 php 函数中,但这可能是 openssl 的限制。

关于php - 生成带有 subjectAltName 扩展名的 CSR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34323195/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com