Apache HTTP 的部分客户端证书请求

Apache HTTP 的部分客户端证书请求

我有一个启用了 SSL 并正在请求客户端证书的 Apache HTTP 服务器。

如何设置 Apache 以便仅在用户访问网站的某个部分时请求证书?

示例:
/myapp/ 不应请求证书
/myapp2/ 应请求证书

注意:这些应用程序使用 mod-jk 提供服务

答案1

这里的技巧是您需要在 tomcat 中执行此操作。因为这才是实际处理请求的地方。

由于客户端身份验证基于每个连接器,因此您需要创建 2 个新连接器。一个用于带身份验证的基本 SSL,另一个用于 mod_jk 连接器(所选端口任意选择为 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 工作器来连接到 apache 中 /myapp2 的客户端身份验证 SSL

答案2

像这样的事情应该会产生神奇的效果:

<Directory /myapp2>
  SSLVerifyClient require
</Directory>

<Directory /myapp>
  SSLVerifyClient none
</Directory>

有关 SSLVerifyClient 指令的更多信息这里

答案3

这可能会有用:http://httpd.apache.org/docs/2.0/ssl/ssl_howto.html#arbitraryclients

如何根据证书对特定 URL 的客户端进行身份验证,但仍允许任意客户端访问服务器的其余部分?

为此,我们再次使用 mod_ssl 的每个目录重新配置功能:httpd.conf

SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt

<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>

相关内容