有没有办法配置Apache mod_ssl以允许一个特定IP使用TLS 1.0,同时为所有其他IP强制执行TLS 1.2? 我需要支持来自仅支持TLS 1.0的遗留系统的连接,但我不想为每个主机完全打开TLS 1.0。 我知道IP欺骗等,但基于IP的限制 - 如果可能的话 - 似乎是最好的妥协,直到遗留系统被替换。
答案 0 :(得分:0)
有两种方法可以解决您的问题,具体取决于您的客户端的行为方式,或取决于您的偏好(带有Allow指令的原生Apache或基于重写)
您需要知道客户端是否支持SNI(握手的捕获将回答此问题)。大多数客户都支持它,即使对于TLS 1.0,但由于它是遗留系统,也许它没有。
如果不支持SNI,您可以声明两个虚拟主机,其目的是将所有遗留请求发送到第一个VH(支持TLS 1.0),第二个VH将回答其他人。 IP检查由Allow指令完成:
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
# For the legacy
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName unknown
SSLProtocol TLSv1
<Directory "/var/www/html">
Order Deny,Allow
Deny from all
Allow from 192.168.1.50 # your legacy ip
</Directory>
</VirtualHost>
# For all others
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName my.domain.com
SSLProtocol TLSv1.2
<Directory "/var/www/html">
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
如果允许SNI,我们可以用RewriteCond解决问题。我相信它需要更多的CPU,因为使用RewriteEngine,但解决方案1也可以被这个替换。您需要启用Rewrite和Remoteip模块。
NameVirtualHost *:443
SSLStrictSNIVHostCheck on
# For all others
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName my.domain.com
SSLProtocol TLSv1 TLSv1.2
RewriteEngine On
RewriteCond %{SSL:SSL_PROTOCOL} ^TLSv1$
RewriteCond %{REMOTE_ADDR} !"192.168.1.50" #your legacy ip
RewriteRule .* "-" [F]
<Directory "/var/www/html">
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
让我们知道结果。