我有一个启用SSL的Apache HTTP服务器并请求客户端证书。
如何将Apache设置为仅在用户点击某个网站的某个部分时才请求证书?
例:
/ myapp /不应该要求证书
/ myapp2 /应该请求证书
注意:这些应用程序正在使用mod-jk服务
这里的诀窍是你需要在tomcat中这样做。 因为这实际上是在执行请求。
由于客户端身份validation是在每个连接器的基础上,您将需要创build2个新的连接器。 一个用于基本SSL w / auth,另一个用于mod_jk连接器(任意select的端口为cur + 1)。
<!-- Client Auth Connector on port 8444 --> <!-- <Connector port="8444" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" /> --> <!-- Client auth ajp connector on port 8010 --> <Connector port="8010" enableLookups="false" redirectPort="8444" debug="0" protocol="AJP/1.3" />
然后,设置一个辅助mod_jk worker来连接到apache的客户端auth SSL for / myapp2
像这样的应该做的魔术:
<Directory /myapp2> SSLVerifyClient require </Directory> <Directory /myapp> SSLVerifyClient none </Directory>
有关SSLVerifyClient指令的更多信息。
这可能工作: http : //httpd.apache.org/docs/2.0/ssl/ssl_howto.html#arbitraryclients
我如何根据证书对特定的URL进行身份validation,但仍允许任意客户端访问服务器的其余部分?
为此,我们再次使用mod_ssl:httpd.conf的每个目录的重新configuration特性
SSLVerifyClient none SSLCACertificateFile conf/ssl.crt/ca.crt <Location /secure/area> SSLVerifyClient require SSLVerifyDepth 1 </Location>