openssl_csr_sign () возвращает false при попытке подписать предварительно сгенерированным CA и ключом CA - PullRequest
0 голосов
/ 09 июля 2019

Мой проект заключается в выдаче сертификатов пользователям после того, как они ввели требуемую информацию, проблема, с которой я сталкиваюсь, заключается в том, что после создания CSR (запроса на подпись сертификата) на основе переданной информации я пытаюсь подписать его с CA и ключ CA, но он дает сбой и не выдает ошибку.

Я хотел попробовать и убедиться, что метод openssl_csr_sign работает, поэтому сначала я попытался самостоятельно подписать CSR, и это сработало, но это удовлетворило бы требования проекта.

Я также пытался передать CA и ключи CA в виде строк (не работало), я пытался отправить их с их путевыми именами (не работало), я нашел эту информацию здесь

Я также удалил ключевую фразу из ключа CA priv, чтобы сделать ее максимально простой

Это документация php для openssl_csr_sign ссылка

$dn = array(
    "countryName" => $_POST['country'],
    "stateOrProvinceName" => $_POST['state'],
    "localityName" => $_POST['loc'],
    "organizationName" => $_POST['orgName'],
    "organizationalUnitName" => $_POST['orgUnit'],
    "commonName" => $_POST['name'],
    "emailAddress" => $_POST['email']
);

// Generate a new private (and public) key pair
$privkey = openssl_pkey_new(array(
    "private_key_bits" => 2048,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
));

// Generate a certificate signing request
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));

// Generate a certificate authority signed cert, valid for 365 days

$pathToPem = "./PulseSecureCA.crt"; # in my program, they are all absolute path names
$fileGetCert = file_get_contents('./PulseSecureCA.crt');

$fp = fopen($pathToPem, "r");
$CAAuth = fread($fp, 8192);
fclose($fp);
echo "<br/>The Certificate Authority:<br/>".$CAAuth."<br/><br/>";

//$privkeytester = array(file_get_contents("./PulseSecureCA.key"),"abhi");

$pathToCAKey = "./PulseSecureCANoPass.key";
$fileGetKey = file_get_contents('./PulseSecureCANoPass.key');

$fp = fopen("./PulseSecureCANoPass.key", "r");
$CAAuthKey = fread($fp, 8192);
fclose($fp);
echo "<br/>The Certificate Authority Key w/ no pass:<br/>".$CAAuthKey."<br/><br/>";
echo gettype($csr);

if (openssl_csr_sign($csr, $pathToPem, $CAAuthKey, 365, array('digest_alg'=>'sha256')) == FALSE)
    echo "breaking here<br/>";
else
    echo "signed Cert";

Я ожидаю, что выходные данные будут подписаны, Cert, но я получаю "разрыв здесь", напечатанный на экране. Я попытался повторить все, чтобы увидеть, что в основном отличалось, но я не уверен, что мне нужно делать дальше, чтобы исправить это. OPENSSL.cnf активен и находится на правильном пути, и когда я запускаю ehco php.info (), он говорит, что openSSL включен. НЕТ ОШИБКИ, СКАЖИТЕ, ЧТО ПЕЧАТАНО, я полностью потерян

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...