Apache:允许一台主机使用 TLS 1.0,同时强制所有其他主机使用 1.2?
Apache: Allow TLS 1.0 for one host while forcing all others to use 1.2?
有没有办法配置 Apache mod_ssl 以允许对一个特定 IP 使用 TLS 1.0,同时对所有其他 IP 实施 TLS 1.2?
我需要支持来自一个仅支持 TLS 1.0 的遗留系统的连接,但我不想为每个主机完全开放 TLS 1.0。
我知道 IP 欺骗等等,但是基于 IP 的限制——如果可能的话——似乎是在旧系统被替换之前最好的折衷方案。
有 2 种方法可以解决您的问题,具体取决于您的客户端的行为方式,或取决于您的偏好(带有 Allow 指令的本机 Apache,或基于重写)
您需要知道客户端是否支持 SNI(握手的捕获可以回答这个问题)。大多数客户都支持它,即使是 TLS 1.0,但由于它是一个遗留系统,可能不支持。
如果不支持 SNI,您可以声明两个虚拟主机,想法是将所有遗留请求发送到第一个 VH(支持 TLS 1.0),第二个 VH 将回答其他 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>
让我们知道结果。
有没有办法配置 Apache mod_ssl 以允许对一个特定 IP 使用 TLS 1.0,同时对所有其他 IP 实施 TLS 1.2? 我需要支持来自一个仅支持 TLS 1.0 的遗留系统的连接,但我不想为每个主机完全开放 TLS 1.0。 我知道 IP 欺骗等等,但是基于 IP 的限制——如果可能的话——似乎是在旧系统被替换之前最好的折衷方案。
有 2 种方法可以解决您的问题,具体取决于您的客户端的行为方式,或取决于您的偏好(带有 Allow 指令的本机 Apache,或基于重写)
您需要知道客户端是否支持 SNI(握手的捕获可以回答这个问题)。大多数客户都支持它,即使是 TLS 1.0,但由于它是一个遗留系统,可能不支持。
如果不支持 SNI,您可以声明两个虚拟主机,想法是将所有遗留请求发送到第一个 VH(支持 TLS 1.0),第二个 VH 将回答其他 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>
让我们知道结果。