我需要允许在没有 SSL 证书的情况下从我的办公室网络访问我的网站,并允许在外部使用 SSL 证书。
这是我的配置:
<Directory /srv/www>
AllowOverride All
Order deny,allow
Deny from all
# office network static IP
Allow from xxx.xxx.xxx.xxx
SSLVerifyClient require
SSLOptions +FakeBasicAuth
AuthName "My secure area"
AuthType Basic
AuthUserFile /etc/httpd/ssl/index
Require valid-user
Satisfy Any
</Directory>
当我在网络内部并拥有证书时 - 我可以访问。当我在网络内部并且没有证书时 - 我无法访问,它需要证书。
当我在网络外且有证书时 - 我无法访问,它显示基本登录屏幕 当我在网络外且没有证书时 - 我无法访问,它显示基本登录屏幕
并且以下配置完美运行
<Directory /srv/www>
AllowOverride All
Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx
AuthUserFile /srv/www/htpasswd
AuthName "Restricted Access"
AuthType Basic
Require valid-user
Satisfy Any
</Directory>
这是我实现的方式(xxx.xxx.xxx.xxx - 允许在没有证书的情况下访问该地址):
请注意,SSLVerifyClient 不应位于目录上下文中:
据推测,在您的网络内部,服务器具有与从外部访问时不同的(内部,私有)IP。
在这种情况下,最简单的方法是设置两个虚拟主机 - 一个在 in.ternal.ip:443 上,一个在 ex.ter.nal.ip:443 上。
仅在外部虚拟主机上需要客户端证书。
我惊讶地发现这在 Apache 2.4 中有效: