Назад | Перейти на главную страницу

Получение Apache для получения сертификата «Альтернативное имя субъекта»

Я пытаюсь заставить apache предоставлять php различные части личных сертификатов клиентов, включая (что наиболее важно) поле «альтернативное имя темы». Когда я проверяю сертификат в браузере, я вижу это значение, но оно не отображается по умолчанию из Apache (в основном только CN / DN).

Запуск LAMPP 1.7.1

Любые идеи?

Сертификат в кодировке PEM доступен вашему PHP-приложению в переменной среды.

$SSL_CLIENT_CERT

Вы можете использовать функции PHP openssl для его анализа, что дает вам ассоциативный массив ключей и значений сертификатов. Я предполагаю, что одним из них будет ваше альтернативное имя.

http://uk3.php.net/manual/en/function.openssl-x509-parse.php

Это потребует изменений в вашем PHP-приложении, но это не страшно:

  • проверить наличие переменной окружения
  • расшифровать сертификат
  • проверьте наличие ключа, представляющего альтернативное имя
  • назначить значение, связанное с этим ключом, какой-либо другой переменной, которую может использовать остальная часть вашего приложения

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

Мне потребовалось время, чтобы разобраться с этим, и информация довольно разрозненная, так что вот как я это сделал ...

Сначала убедитесь, что ваш Apache имеет следующий набор:

SSLOptions +ExportCertData

в противном случае $ _SERVER ["SSL_CLIENT_CERT"] будет пустым.

Убедившись, что в $ _SERVER ["SSL_CLIENT_CERT"] есть контент, используйте:

$clicertarray = openssl_x509_parse($_SERVER["SSL_CLIENT_CERT"]);

чтобы разобрать сертификат в массив, вы сможете извлечь альтернативное имя субъекта с помощью:

$clicertarray["extensions"]["subjectAltName"];

Использовать var_dump ($ _ ENV) и ищите переменные, начинающиеся с SSL_

Также проверьте SSLOptions из руководства apache. StdEnvVars и ExportCertData выглядит хорошо. Если первое не помогает, возможно, вам нужно проанализировать данные сертификата, переданные ExportCertData