Apache 不会请求我的 SSL 客户端证书
首先,请注意,我是配置SSL的新手。过去,我一直很幸运有一个IT部门提前为我设置了它。因此,请准备好我可能需要要求澄清您的一些答案的可能性。=)
我想做什么
我正在为员工建立一个公司内部网网站。例如,将有一个浏览器起始页,显示为每个员工自定义的内容。因此,我需要能够识别所述员工,而无需任何用户名/密码或其他提示(一次性设置是可以的;我只是不希望他们每次都得到提示)。当然,SSL似乎是执行此操作的最佳方法。
我将设置一个MySQL数据库,将“用户”帐户与SSL_CLIENT_M_SERIAL和SSL_CLIENT_I_DN相关联,我假设每个客户端证书(?)都是唯一的。我从这篇文章中得到了这个想法:http://cweiske.de/tagebuch/ssl-client-certificates.htm
用户第一次访问内部网站时,他们不会有证书(我不想为客户手动生成证书!),在这种情况下,$_SERVER[“SSL_CLIENT_VERIFY”] == “NONE”。如果发生这种情况,它将转到用户帐户设置页面,该页面将包括一个步骤,其中PHP生成SSL客户端证书并将其发送到浏览器供用户安装。很好,很简单。然后,用户安装证书,建立关联,重新启动浏览器(为了更好地衡量)后,用户返回到内部网站。
此时,Apache应该请求客户端证书,然后浏览器发送该证书。然后,PHP脚本解析必要的$_SERVER变量,与MySQL数据库进行比较,所有人都度过了美好的时光。再次,漂亮而简单。
到目前为止,什么有效
我已安装服务器端证书。是的,它们是自签名的(出于明显的原因)。Apache已经安装了mod_ssl,所有这些似乎都运行良好。我创建了一个 PHP 脚本,该脚本仅转储 $_SERVER 数组,并且所有 SSL_SERVER_* 键值都与我为其创建的证书匹配。
问题
我无法让客户端证书正常工作!在同一个PHP脚本中,无论我做什么,SSL_CLIENT_VERIFY==“NONE”,其他SSL_CLIENT_*键都丢失了。如果我在ssl.conf中将SSLVerifyClient设置为可选,就会发生这种情况。根据我读过的每个教程,他们都说Web服务器应该向浏览器询问客户端证书。问题是,我不能让它这样做!它只是直接进入PHP脚本,并假设我根本没有客户端证书。这发生在Firefox,Chrome和IE中。
因此,我尝试将SSLVerifyClient设置为必需并重新启动Web服务器。有了这个选项,我甚至无法建立SSL连接。Firefox只是说连接已被重置(其他浏览器也显示该错误自己的版本)。奇怪的是,日志没有显示这些连接尝试的任何活动!即access_log,error_log,ssl_access_log,ssl_error_log和ssl_request_log都不显示任何内容;就好像这种尝试从未发生过一样。这很令人沮丧,因为这意味着我甚至没有要处理的错误消息。只是一个网络服务器被动地主动告诉我下地狱。
我尝试使用PHP的OpenSSL扩展手动生成/安装我自己的客户端证书。证书安装得很好,尽管我找不到有关如何将该证书与服务器证书相关联的任何信息(假设我甚至需要这样做?)。此外,这似乎并不重要,因为如果设置了可选选项,Apache甚至不会请求客户端证书。如果设置了要求,它就会在没有解释的情况下爆炸。无论如何,我需要将其设置为可选,以使此架构正常工作。
环境
操作系统: CentOS 5.7 64 位 (VirtualBox)
Apache: 2.2.3
菲律宾比索: 5.3.10
我猜你可能需要更多的信息来帮助我,所以请问!我会为你提供你需要的任何东西。
总而言之,我需要知道如何让Apache在满足上述条件的情况下请求SSL客户端证书。此外,如果必须执行任何特殊的签名/等才能使客户端证书与服务器证书“兼容”(同样,无需通过shell为每个客户端证书手动执行此操作!),我还需要知道这一点。
到目前为止,我100%坚持这一点。在谷歌上找不到任何有用的东西。您可以为此提供的任何帮助将不胜感激!谢谢!=)