2011-08-27 106 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); 
?>