当php文件在apache conf中受SSLVerifyClient保护时,我可以使浏览器强制使用智能卡进行身份验证,例如身份证。
现在我需要显示 index.php 通常不需要智能卡身份验证,有时同一页面必须获得用户身份验证。
doStuff();
if ($needed==1)
authenticateUser();
doMoreStuff();
authenticateUser() 必须包含什么才能调用它导致浏览器询问智能卡密码?
你把这些东西混在一起了。
authenticateUser();
在服务器上运行,而身份验证发生在客户端上。您不能在为客户端身份验证运行 PHP 脚本的过程中停下来,然后继续运行 PHP 脚本。
作为您问题的解决方案,这可能适用于您的情况:
if(authenticationNeeded)
{
// redirect to a page that requires authentication that does what index was supposed to do.
redirect('index_ssl.php');
}
通过使用.htaccess
,您SSLVerifyClient require
只能为某些目录/文件定义。
关键点是:您的 Web 服务器(在本例中为 Apache)需要客户端证书才能授予对您指定的任何目录/文件的访问权限SSLVerifyClient require
。
总之,没有办法做你想做的事。您只能拥有需要或不需要客户端证书的文件/目录。没有办法在 PHP 文件中间停下来要求客户端证书,但您可以重定向到需要客户端证书的文件。