使用 php 生成证书签名请求时证书和私钥不匹配

Certificate and private key do not match when using php to generate certificate signing request

我遇到的问题是 CA(在本例中为 Microsoft AD 认证服务)颁发的证书与用于在 PHP 中创建证书请求的私钥不匹配,我有不知道,怎么会这样。

这是我的代码:

<?php
    $dn = array(
        "countryName" => "NL",
        "stateOrProvinceName" => "state",
        "localityName" => "City",
        "organizationName" => "Company",
        "organizationalUnitName" => "Unit",
        "commonName" => exec("hostname").'.'.exec("hostname -d"),
        "emailAddress" => "mail@example.com"
    );
    
    $res_privkey = openssl_pkey_new();
    openssl_pkey_export_to_file($res_privkey, '/var/www/html/privkey.pem');
            
    $res_csr = openssl_csr_new($dn, $res_privkey);
    openssl_csr_export_to_file($res_csr, '/var/www/html/csr.pem');
?>

然后我使用 csr.pem 作为签名请求并从我的 CA 获得一个 base64 编码的证书 certnew.cer。但是当我在我的 apache 配置中使用私钥 privkey.pem 和证书 certnew.cer 时,我收到了 apache 错误消息

AH02565:来自...和...的证书和私钥 127.0.0.1:443:0 不匹配

有什么想法吗?

不是问题的真正解决方案,但至少是 work-around:我更改了 php 以调用完美完成工作的 bash 脚本:

<?php
$key = "/var/www/html/privkey.pem";
    $csr = "/var/www/html/csr.pem";
    $subj = "/C=NL/ST=state/L=City/O=Company/OU=Unit/CN=".exec("hostname").'.'.exec("hostname -d")."/emailAddress=mail@example.com";
    
exec("sudo ./create_csr.sh $key $csr $subj");
?>

这里是 bash 脚本:

#!/bin/bash
key=
csr=
subj=
openssl req -new -key $key -out $csr -subj $subj