我试图让Apache公开暴露各种客户的个人证书到PHP,包括(最重要的)“alt主题名称”字段。 当我在浏览器中检查一个证书时,我可以看到这个值,但是它没有默认从Apache(主要是CN / DN)公开。
运行LAMPP 1.7.1
有任何想法吗?
PEM编码证书在环境variables中可用于您的PHP应用程序
$SSL_CLIENT_CERT
您可以使用PHP openssl函数来parsing这个函数,这会返回一个关联的证书键和值的数组。 我假设其中的一个将是你的名字。
http://uk3.php.net/manual/en/function.openssl-x509-parse.php
这将需要修改您的PHP应用程序,但它并不可怕:
可以很容易地打包成一个函数,你可以包含在我想的多个应用程序中。
我花了一段时间来解决这个问题,而且信息相当分散,所以我就是这么做的。
首先确保你的Apache有以下设置:
SSLOptions +ExportCertData
否则$ _SERVER [“SSL_CLIENT_CERT”]将为空。
validation$ _SERVER [“SSL_CLIENT_CERT”]的内容后,请使用:
$clicertarray = openssl_x509_parse($_SERVER["SSL_CLIENT_CERT"]);
要将证书parsing成一个数组,那么你可以用下面的方法来取代主题的替代名称:
$clicertarray["extensions"]["subjectAltName"];
使用var_dump($ _ ENV)并查找以SSL_开头的variables
另外,从Apache的手册中检查SSLOptions 。 StdEnvVars和ExportCertData看起来不错。 如果第一个没有帮助,也许你需要parsing由ExportCertData传递的证书数据