尽管仅指定了 TLSv1、TLSv1.1 和 TLSv1.2,但 NGINX 仍使用 SSLv3

尽管仅指定了 TLSv1、TLSv1.1 和 TLSv1.2,但 NGINX 仍使用 SSLv3

我最近开始配置自己的网站(之前没有服务器经验,但在 Linux 上工作了几年),我选择了 NGINX 作为我的网络服务器。它在装有 Raspbian 8(本质上是 Debian Jessie)的 Raspberry Pi 2 上运行。我很快就让常规 http 工作起来了,但 https 很麻烦。我遵循了本教程,除了关于 Let's Encrypt 的部分,因为我使用带有 webroot 的 certbot 来获取我的证书。现在,当我尝试使用其域名或外部 IP 从 Web 浏览器连接到服务器时,我得到了以下信息:

(我用 mywebsite.com 替换了我的实际域名)

铬:

This site can’t provide a secure connection

mywebsite.com uses an unsupported protocol.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH

火狐浏览器:

Unable to Connect Securely

Firefox cannot guarantee the safety of your data on mywebsite.com because
it uses SSLv3, a broken security protocol.

这两个错误都让我相信 NGINX 正在使用 SSLv3,尽管它没有在任何配置文件中指定。我没有修改/etc/nginx/nginx.conf。根据配置,配置中没有语法错误nginx -t

/etc/nginx/sites-enabled/default

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        server_name mywebsite.com www.mywebsite.com;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header Strict-Transport-Security max-age=15768000;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }
}
server {
        listen 80;
        listen [::]:80;
        server_name mywebsite.com www.mywebsite.com;
        return 301 https://$host$request_uri;
}

有趣的是,当我通过本地地址 192.168.1.64 连接到服务器时,index.html 确实会加载,但(可以理解)浏览器会抱怨证书仅对 mywebsite.com 和 www.mywebsite.com 有效,而不对 192.168.1.64 有效。在我的 DNS 服务器上,我为 mywebsite.com 和 *.mywebsite.com 指定了 A 记录,两者都指向服务器的 IP。我错过了什么?

(这个问题从 Server Fault 移到这里,之前因为偏离主题而被关闭)

答案1

我真傻!我忘了检查我那台老旧的调制解调器上的端口转发设置,所以我访问的是它的控制面板,而不是我的网站。我没有继续浏览浏览器显示的错误,而我应该这样做。不过,他们确实让这变得很困难。

剩下的唯一一个谜团就是 certbot webroot 一开始为什么能工作?我以为它需要打开 443 端口才能工作,但无论如何我还是拿到了 raspi 的钥匙。

相关内容