我试图让 apache 将各种客户的个人证书公开给 php,包括(最重要的是)“alt 主题名称”字段。当我在浏览器中检查证书时,我可以看到这个值,但默认情况下它不会从 Apache 公开(主要是 CN/DN)。
运行 LAMPP 1.7.1
有任何想法吗?
我试图让 apache 将各种客户的个人证书公开给 php,包括(最重要的是)“alt 主题名称”字段。当我在浏览器中检查证书时,我可以看到这个值,但默认情况下它不会从 Apache 公开(主要是 CN/DN)。
运行 LAMPP 1.7.1
有任何想法吗?
PEM 编码的证书可用于环境变量中的 PHP 应用程序
您可以使用 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_ 开头的变量
另外,检查apache 手册中的SSLOptions 。StdEnvVars和ExportCertData看起来不错。如果第一个没有帮助,也许您需要解析ExportCertData传递的证书数据