Я столкнулся с проблемой, что сертификат, выданный центром сертификации (в данном случае службой сертификации 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 в качестве запроса на подпись и получаю сертификат в кодировке base64 certnew.cer из моего центра сертификации. Но когда я использую закрытый ключ privkey.pem и сертификат certnew.cer в своей конфигурации apache, я получаю сообщение об ошибке apache

AH02565: сертификат и закрытый ключ 127.0.0.1:443:0 от ... и ... не совпадают

Любые идеи?

0
Axel Booltink 7 Окт 2020 в 18:40

1 ответ

Лучший ответ

На самом деле это не решение вопроса, но, по крайней мере, обходной путь: я изменил свой 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=$1
csr=$2
subj=$3
openssl req -new -key $key -out $csr -subj $subj
0
Axel Booltink 8 Окт 2020 в 12:50