让 Apache 提取证书的“备用主题名称”

让 Apache 提取证书的“备用主题名称”

我正在尝试让 apache 将客户个人证书的各个部分公开给 php,包括(最重要的)“alt subject name”字段。当我在浏览器中检查证书时,我可以看到此值,但默认情况下 Apache 不会公开此值(主要是 CN/DN)。

运行 LAMPP 1.7.1

有任何想法吗?

答案1

PEM 编码的证书可在环境变量中供您的 PHP 应用程序使用

$SSL_CLIENT_CERT

您可以使用 PHP openssl 函数来解析此信息,它会返回一个证书密钥和值的关联数组。我假设其中一个是您的替代名称。

https://www.php.net/manual/en/function.openssl-x509-parse.php

它将需要修改你的 PHP 应用程序,但并不可怕:

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

我认为,可以轻松地将其打包成一个函数,并将其包含在多个应用程序中。

答案2

我花了一段时间才解决这个问题,而且信息相当分散,所以我这样做是为了让...

首先确保您的 Apache 具有以下设置:

SSLOptions +ExportCertData

否则 $_SERVER["SSL_CLIENT_CERT"] 将为空白。

一旦您验证了 $_SERVER["SSL_CLIENT_CERT"] 有内容,然后使用:

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

将证书解析为数组,然后您将能够使用以下命令提取主题备用名称:

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

答案3

使用var_dump($_ENV)并查找以 SSL_ 开头的变量

另外,检查SSL选项来自 apache 的手册。标准环境变量出口证书数据看起来不错。如果第一个没有帮助,也许你需要解析通过出口证书数据

相关内容