Openssl csr get subject: примеры (PHP)
openssl_csr_get_subject(OpenSSLCertificateSigningRequest|string $csr, bool $short_names = true): array|falseФункция openssl_csr_get_subject извлекает информацию о субъекте из запроса на подпись сертификата (Certificate Signing Request, CSR). Функция используется при обработке CSR, например, для проверки данных перед созданием или подписью сертификата, в системах автоматизации PKI (Public Key Infrastructure) или веб-интерфейсах для генерации сертификатов.
csr: Может быть строкой в формате PEM или ресурсом, возвращаемым функциямиopenssl_csr_new()илиopenssl_csr_sign(). Это обязательный аргумент.short_names: Необязательный логический параметр (по умолчаниюtrue). При значенииtrueключи в возвращаемом массиве будут короткими именами (например, 'CN', 'C'). Приfalseбудут использоваться длинные описательные имена (например, 'commonName', 'countryName').
Функция возвращает ассоциативный массив с данными субъекта или false в случае ошибки.
Получение данных из CSR в виде строки PEM.
<?php
$csrPem = '-----BEGIN CERTIFICATE REQUEST-----
MIIC0TCCAbkCAQAwgYcxCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZNb3Njb3cxDzAN
... (остальная часть CSR) ...
-----END CERTIFICATE REQUEST-----';
$subject = openssl_csr_get_subject($csrPem);
print_r($subject);
?>Array
(
[C] => RU
[ST] => Moscow
[L] => Moscow
[O] => Example Company
[CN] => www.example.com
)<?php
$csrPem = '-----BEGIN CERTIFICATE REQUEST-----...';
$subject = openssl_csr_get_subject($csrPem, false);
print_r($subject);
?>Array
(
[countryName] => RU
[stateOrProvinceName] => Moscow
[localityName] => Moscow
[organizationName] => Example Company
[commonName] => www.example.com
)<?php
// Создание нового CSR
$dn = [
"countryName" => "RU",
"commonName" => "test.local",
];
$privkey = openssl_pkey_new();
$csrResource = openssl_csr_new($dn, $privkey);
// Извлечение данных субъекта
$subject = openssl_csr_get_subject($csrResource);
print_r($subject);
?>Array
(
[C] => RU
[CN] => test.local
)Извлекает открытый ключ из CSR в виде ресурса. Применяется, когда нужен не сам субъект, а связанный с запросом открытый ключ.
Создает новый CSR. Функция openssl_csr_get_subject часто используется для проверки данных CSR, сгенерированного этой функцией.
Анализирует уже подписанный сертификат X.509 и возвращает детальную информацию, включая данные субъекта и издателя. Предпочтительнее для работы с готовыми сертификатами, а не с запросами.
openssl_csr_get_subject используют специфически для работы с запросами на подпись до их превращения в сертификат.
<?php
$badPem = "-----BEGIN CERTIFICATE REQUEST-----
INVALID_DATA
-----END CERTIFICATE REQUEST-----";
$result = openssl_csr_get_subject($badPem);
var_dump($result);
?>bool(false)
Функция возвращает false. Для диагностики можно использовать openssl_error_string().
<?php
$result = openssl_csr_get_subject(12345);
var_dump($result);
?>Warning: openssl_csr_get_subject(): supplied parameter cannot be coerced into a CSR in ... bool(false)
Важно передавать именно строку PEM или ресурс CSR.
<?php
$x509Pem = '-----BEGIN CERTIFICATE-----...';
$result = openssl_csr_get_subject($x509Pem);
var_dump($result);
?>bool(false)
Функция предназначена только для CSR. Для сертификатов существует openssl_x509_parse().
- PHP 8.0.0: Параметр
short_namesтеперь имеет типbool. Ранее он был целочисленным (int). - PHP 7.3.0: В качестве параметра
csrстала приниматься строка PEM в дополнение к ресурсу.
<?php
function validateCSRCN($csrPem, $expectedDomain) {
$subject = openssl_csr_get_subject($csrPem);
if ($subject === false) {
return "Ошибка чтения CSR";
}
$actualCN = $subject['CN'] ?? null;
return ($actualCN === $expectedDomain) ? "CN совпадает" : "CN не совпадает. Ожидалось: $expectedDomain, получено: $actualCN";
}
$csr = '...CSR для example.com...';
echo validateCSRCN($csr, "example.com");
?>CN совпадает
<?php
$csrPem = file_get_contents('/path/to/invalid.csr');
if ($csrPem === false) {
die("Не удалось прочитать файл.");
}
$subject = openssl_csr_get_subject($csrPem, false);
if ($subject === false) {
$errorMsg = "";
while (($error = openssl_error_string()) !== false) {
$errorMsg .= $error . "\n";
}
die("Ошибка при разборе CSR:\n" . $errorMsg);
}
echo "Данные субъекта (полные имена):\n";
foreach ($subject as $key => $value) {
echo "$key: $value\n";
}
?>Ошибка при разборе CSR: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error ...
<?php
function compareCSRSubjects($csr1, $csr2) {
$subj1 = openssl_csr_get_subject($csr1);
$subj2 = openssl_csr_get_subject($csr2);
if ($subj1 === false || $subj2 === false) {
return false;
}
// Сравниваем только основные поля, игнорируя возможные дополнительные атрибуты в одном из CSR
$fields = ['C', 'ST', 'L', 'O', 'OU', 'CN', 'emailAddress'];
$differences = [];
foreach ($fields as $field) {
$val1 = $subj1[$field] ?? '(не задано)';
$val2 = $subj2[$field] ?? '(не задано)';
if ($val1 !== $val2) {
$differences[$field] = ["CSR1" => $val1, "CSR2" => $val2];
}
}
return $differences;
}
?>from cryptography import x509
from cryptography.hazmat.primitives import serialization
pem_csr = b"-----BEGIN CERTIFICATE REQUEST-----..."
csr = x509.load_pem_x509_csr(pem_csr)
subject = csr.subject
print(subject.rfc4514_string())CN=www.example.com, O=Example Company, L=Moscow, ST=Moscow, C=RU
Библиотека предлагает более объектно-ориентированный и детализированный API.
openssl req -in request.csr -noout -subjectsubject=C = RU, ST = Moscow, L = Moscow, O = Example Company, CN = www.example.com
Консольная утилита предоставляет аналогичные данные в текстовом формате.
Прямого аналога в стандартной библиотеке нет. Требуются сторонние модули для парсинга ASN.1 структуры CSR, что делает процесс менее тривиальным, чем в PHP.
PHP openssl_csr_get_subject function comments
- Php openssl csr get subject - аргументы и возвращаемое значение
- Функция php openssl_csr_get_subject - описание
- openssl csr get subject - примеры
- openssl csr get subject - похожие методы на php
- openssl_csr_get_subject на js, python, mysql
- openssl csr get subject изменения php
- Примеры openssl_csr_get_subject на php