Mik*_*maa 5 ssl https openssl apache-2.2
我正在设置 Apache 来进行智能卡身份验证。智能卡登录基于由操作系统驱动程序处理的客户端 SSL 证书。
我目前只有一个智能卡提供商,但将来可能会有几个。我不确定 Apache 2.2. 处理每个位置的客户端认证。我做了一些快速测试,不知何故似乎只有最后一个 SSLCACertificateFile 指令才会有效,这听起来不对。
如下所述,是否可以在 Apache(2.2、2.4)中的每个位置使用不同的 SSLCACertificateFile,或者 SSL 协议是否以某种方式限制了每个 IP 不能拥有多个 SSLCACertificateFile?
下面的示例潜在配置我希望如何在同一服务器上处理多个 SSLCACertificateFile 以允许用户使用不同的智能卡提供登录。
<VirtualHost 127.0.0.1:443>
# Real men use mod_proxy
DocumentRoot "/nowhere"
ServerName local-apache
ServerAdmin you@example.com
SSLEngine on
SSLOptions +StdEnvVars +ExportCertData
# Server-side HTTPS configuration
SSLCertificateFile /etc/apache2/certificate-test/server.crt
SSLCertificateKeyFile /etc/apache2/certificate-test/server.key
# Normal SSL site traffic does not require verify client
SSLVerifyClient none
SSLVerifyDepth 999
# Provider 1
<Location /@@smartcard-login>
SSLVerifyClient require
SSLCACertificateFile /etc/apache2/certificate-test/ca.crt
# Apache does not natively pass forward headers
# created by SSLOptions +StdEnvVars,
# so we pass them forward to Python using RequestHeader
# from mod_headers
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
</Location>
# Provider 2
<Location /@@smartcard-login-provider-2>
# For real
SSLVerifyClient require
SSLCACertificateFile /etc/apache2/certificate-test/provider2.crt
# Apache does not natively pass forward headers
# created by SSLOptions +StdEnvVars,
# so we pass them forward to Python using RequestHeader
# from mod_headers
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
</Location>
# Connect to Plone ZEO client1 running on fg
ProxyPass / http://localhost:8080/VirtualHostBase/https/local-apache:443/folder_sits/sitsngta/VirtualHostRoot/
ProxyPassReverse / http://localhost:8080/VirtualHostBase/https/local-apache:443/folder_sits/sitsngta/VirtualHostRoot/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
小智 5
正如 Vlastimil Zima 所回答的,您确实可以用于SSLRequire此目的(至少如果您想要/需要在两个 CA 之间做出区分)。否则,只需将两个证书合并为一个就足够了(正如柯蒂斯所要求的:是的,您可以将证书组合起来以实现类似的功能)。看到你的例子,仅仅组合就足够了。
您可以使用 来SSLRequire检查发行人(假设 CN 不同),例如:
<Location /locationone>
SSLRequire %{SSL_CLIENT_I_DN_CN} == "THE CN OF THE FIRST ISSUER"
</location>
<Location /locationtwo>
SSLRequire %{SSL_CLIENT_I_DN_CN} == "THE CN OF THE SECOND ISSUER"
</location>
Run Code Online (Sandbox Code Playgroud)
为此,您仍然需要将 2 个 CA 证书合并为一个。
小智 2
指令SSLCACertificateFile具有虚拟主机上下文,因此即使插入到Location. 您需要用于SSLRequire检查客户端是否使用正确的位置证书。
http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslrequire
| 归档时间: |
|
| 查看次数: |
7203 次 |
| 最近记录: |