APACHE & NGINX - vhost - ERR_SSL_PROTOCOL_ERROR仅适用于Google Chrome

APACHE & NGINX - vhost - ERR_SSL_PROTOCOL_ERROR only with Google Chrome

提问人:Gawel 提问时间:10/4/2023 更新时间:10/5/2023 访问量:282

问:

看到的虚拟主机/服务器在SSL证书上存在一些冲突,并且仅在Chrome浏览器上产生错误“ERR_SSL_PROTOCOL_ERROR”。我在 Apache2 和 Nginx 上尝试了很多 confugurization

我有 1 个服务 (ipv4) 和 2 个子域 (vhost) 指向此服务器(domain1.dns.fr 和 domain2.dns.fr)

几周前,Google chrome 仅在一个子域 (domain2.dns.fr) 上返回 SSL 错误“ERR_SSL_PROTOCOL_ERROR”。

此错误仅在 Google Chrome 上(Firefox、Edge 已成功测试)。

我尝试使用 Apache 和 Nginx 更改 Vhost 配置,但遇到了同样的错误。

非常奇怪的情况是:如果我与 vhost 声明的顺序相反,domain2.dns.fr 工作但 domain1.dns.fr 停止工作(相同的错误:ERR_SSL_PROTOCOL_ERROR)。请参阅下面此用例的给定配置。

所以,我不确定问题来自Frontal应用程序(这不是浏览器缓存器问题;-)),但我没有发现问题。


  • 技术栈:

    • 操作系统 : Ubuntu 14.10
    • 使用 Apache 进行测试:Apache/2.4.10
    • 使用 Nginx 测试:nginx/1.6.2
  • 使用 APACHE 进行测试 - 配置

<VirtualHost domain1.dns.fr:443>
        
        ServerName domain1.dns.fr
        
        ProxyPass / http://localhost:8080/
        
        SSLEngine on
        SSLProtocol -all +TLSv1.2
        SSLCertificateFile /root/.acme.sh/domain1.dns.fr/domain1.dns.fr.cer
        SSLCertificateChainFile /root/.acme.sh/domain1.dns.fr/ca.cer
        SSLCertificateKeyFile /root/.acme.sh/domain1.dns.fr/domain1.dns.fr.key
        
</VirtualHost>

<VirtualHost domain2.dns.fr:443>
        
        ServerName domain2.dns.fr
        
        DocumentRoot /var/www/domain2.dns.fr/public
        <Directory /var/www/domain2.dns.fr/public>
            Require all granted
            Options -Indexes +FollowSymLinks
            AllowOverride all
        </Directory>    
            
        SSLEngine on
        SSLCertificateFile /root/.acme.sh/domain2.dns.fr/domain2.dns.fr.cer
        SSLCertificateChainFile /root/.acme.sh/domain2.dns.fr/ca.cer
        SSLCertificateKeyFile /root/.acme.sh/domain2.dns.frdomain2.dns.fr.key
        
</VirtualHost>
    
    
  • 使用 APACHE 进行测试 - 配置
server {
    listen *:443 ssl;
    server_name domain1.dns.fr;
    charset utf-8;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-for $remote_addr;
        port_in_redirect off;
        proxy_redirect   off;
    }

    ssl on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 60m;
    ssl_prefer_server_ciphers on;
    ssl_certificate /root/.acme.sh/domain1.dns.fr/domain1.dns.fr.cer;
    ssl_certificate_key /root/.acme.sh/domain1.dns.fr/domain1.dns.fr.key;
}

server {
    listen *:443 ssl http2;
    server_name domain2.dns.fr;
    charset utf-8;
     
    location / {
        # redirect on apache instance reconfigured on port 7000 for test without php-fpm installation
        proxy_pass http://localhost:7000;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-for $remote_addr;
        port_in_redirect off;
        proxy_redirect   off;
    }
    
    ssl on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 60m;
    ssl_prefer_server_ciphers on;
    ssl_certificate /root/.acme.sh/domain2.dns.fr/domain2.dns.fr.cer;
    ssl_certificate_key /root/.acme.sh/domain2.dns.fr/domain2.dns.fr.key;
}

  • 主机配置 /etc/hosts
127.0.0.1       localhost
151.80.129.173  vpsXXXXX.ovh.net       vpsXXXXX
  • DNS 区域配置
domain1.dns.fr -> TLS 0 -> A -> XXX.XXX.XX.XX
domain2.dns.fr -> TLS 0 -> A -> XXX.XXX.XX.XX

注意:如果我尝试减少对 ServerName 绑定的限制,则当客户端查询 domain2.dns.fr (...) 时,浏览器中会返回 domain1.dns.fr 的 SSL 证书。vhost 看到困惑..


您有什么想法/解决方案寻求帮助吗?

Apache Nginx SSL DNS 虚拟主机

评论

0赞 Gawel 10/5/2023
@alex你的权利。在这里找到的问题和解决方案:serverfault.com/questions/1144894/...

答:

1赞 Alex Brel 10/5/2023 #1

不确定这是否是您的情况... 但几天前,我遇到了类似的麻烦。 在Centos的Nginx/Apache/Openssl环境中,我几乎没有网站。 Nginx 是 1.4.4,Openssl 是 1.0.1e。是的,很老的。 因此,由于某些SSL证书问题,显然除了位于Nginx conf文件中的第一个网站之外,所有网站都停止显示在Android的Chrome中。错误就像你的一样,“ERR_SSL_PROTOCOL_ERROR”。iOS/Windows Chrome 还可以。iOS/Android/Windows 的所有其他浏览器也都可以。 通过调查,我发现我的任何一个网站首先位于 Nginx 的 conf 文件中,都可以在 Android 的 Chrome 中运行,但只是第一个。 由于麻烦很奇怪,并且只出现在一个操作系统上的一个浏览器中,最后我没有比尝试升级某些东西更好的主意了。 首先,我将 Nginx 升级到最新的稳定版,我相信是 1.24。这毫无意义,麻烦就在那里。 之后,我将 Openssl 升级到 1.0.1 分支的最新版本,即 1.0.1u IIRC。 这终于让我高兴了,一切又开始顺利了。 感谢您的长读。