Мой проект заключается в выдаче сертификатов пользователям после того, как они ввели требуемую информацию, проблема, с которой я сталкиваюсь, заключается в том, что после создания 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 включен. НЕТ ОШИБКИ, СКАЖИТЕ, ЧТО ПЕЧАТАНО, я полностью потерян