Я изучаю цифровые сертификаты в PKI (Инфраструктура открытых ключей). Почти все руководства / страницы, касающиеся этого, дают следующие аналогичные шаги.
Теперь я могу найти путь в php (используя openssl lib) для 1-го и 2-го шага, который может сгенерировать сертификат и подписать его (необязательно, сгенерировать хэш подписи и подписать его тоже) через API openssl.
Но проблема с третьим шагом. Они не являются направляющей линией или вызовом функции, которые показывают, как проверить сертификат с открытым ключом CA.
Если я что-то упустил?
Пример кода, который я проверяю, выглядит ниже
$data = 'my data';
//create new private and public key
$req_key = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
$dn = array(
"countryName" => "IN",
"stateOrProvinceName" => "Delhi",
"organizationName" => "example.net",
"organizationalUnitName" => "Security",
"commonName" => "example.net");
$req_csr = openssl_csr_new ($dn, $req_key);
$req_cert = openssl_csr_sign($req_csr, null, $req_key, 365);
openssl_x509_export ($req_cert, $out_cert);
echo $out_cert;
ПРЕДПОСЫЛКИ: Мне нужно реализовать обмен данными на основе PKI для некоторых приложений. Это будет связано с тем, что некоторый объект данных (объект данных будет иметь свой открытый и закрытый ключи) зашифрован на стороне источника, а затем отправляется по назначению. Затем место назначения расшифровывают и получают четкие данные. Но все это должно включать PKI, что означает цифровую подпись + внедрение цифрового сертификата вместе с.
Эта задача не так проста в PHP. На самом деле, PHP не очень хороший инструмент для реализации CA. Он поддерживает основные операции PKI, но это все. Я вижу три варианта:
http://php.net/manual/en/function.openssl-verify.php#98282
Попробуйте использовать функцию как OpenSSL-x509-checkpurpose это должно быть в состоянии проверить цепочка сертификатов.
Попробуй использовать phpseclib — посмотрите сертификаты Validate X.509 -> validateSignature ().
Я надеюсь, что это поможет вам немного.
Не связывайтесь с проверкой сертификатов самостоятельно но обратите внимание на реализацию алгоритма CPV (Certification Path Validation), который включает в себя все проверки, необходимые для выполнения в цепочке сертификации, где проверка подписи сертификата является только одной из них.
Теперь я искал PHP API для выполнения CPV, но не нашел ни одного, поэтому прибегнул к выполнению следующей внешней команды OpenSSL из PHP:
exec("openssl verify -CAfile trusted_root_cas.pem -untrusted intermediate_cas.pem endentity_cert.pem", $output, $return_var);
if ($return_var == 0) {
echo "Certification path validation completed successfully";
} else {
echo "Certification path validation completed with errors";
}
Где все trusted_root_cas.pem
, intermediate_cas.pem
а также endentity_cert.pem
это могут быть временные файлы, созданные только для выполнения предыдущей команды.
Теперь, если вы хотите знать, что openssl verify
выполняет man verify
:
Команда verify проверяет цепочки сертификатов.