让Apache获取证书的“Alt主题名称”

我试图让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应用程序,但它并不可怕:

  • 检查是否存在环境variables
  • 解码证书
  • 检查是否存在表示替代名称的键
  • 将与该关键字关联的值分配给其他应用程序可以使用的其他variables

可以很容易地打包成一个函数,你可以包含在我想的多个应用程序中。

我花了一段时间来解决这个问题,而且信息相当分散,所以我就是这么做的。

首先确保你的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 。 StdEnvVarsExportCertData看起来不错。 如果第一个没有帮助,也许你需要parsing由ExportCertData传递的证书数据