Я пытаюсь заставить 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