2011-08-27 212 views
3

我想在我的网站上只有X.509身份验证后才能访问的特定页面。 Catch是,我希望它可以提供给所有具有由特定中间CA颁发的匹配证书的客户端(我打算在自生根CA下有几个中间CA,但只有一个由一个特定的中级CA可以访问此页面)。这可能使用PHP?PHP和X.509身份验证 - 检查证书颁发者

让我知道如果我需要进一步阐述,我会尝试添加更多细节。谢谢你的帮助!

TC

+0

如果幸运的话,你可能会发现一个CGI环境变量,以确认CA http://httpd.apache.org/docs/2.0/mod/mod_ssl.html#envvars - 如果服务器协商的SSL/TLS连接与客户端证书(如果这是你正在尝试)。 – mario

回答

1

是的。当您使用SSL扩展和openssl_x509_parse功能获取证书信息时,您将可以访问证书中的所有信息。你应该能够做到这一点在你的PHP脚本:

var_dump(openssl_x509_parse($_SERVER['SSL_CLIENT_CERT'])); 

你应该是数组,有一个与包含有关客户端证书发行者信息的阵列的“发行人”关键在看,我要去承担这会为您提供所需的信息。

+0

永远让我们的客户端证书表现出Apache的行为,但是,这正是我所需要的。谢谢! –

1

如果您不想使用OpenSSL,您可以使用phpseclib, a pure PHP X.509 parser的最新SVN。例如。

<?php 
include('File/X509.php'); 

$x509 = new File_X509(); 
$x509->loadX509($_SERVER['SSL_CLIENT_CERT']); 
echo $x509->getIssuerDN(true); 
?>