ERR_SSL_UNRECOGNIZED_NAME_ALERT Nginx

ERR_SSL_UNRECOGNIZED_NAME_ALERT Nginx

我正在使用 Laravel Forge,但由于我的卡出现问题而停止使用它。所以我继续自己的 Digital Ocean。

我按照以下说明将 SSL 应用于网站。 https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-es

此过程表明存在一些错误,请稍后解决: 例如:

maquino@codigobyte:/etc/nginx/sites-enabled$ sudo nginx -t
nginx: [warn] conflicting server name "todocontenidoweb.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "www.todocontenidoweb.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "todocontenidoweb.com" on [::]:80, ignored
nginx: [warn] conflicting server name "www.todocontenidoweb.com" on [::]:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

问题是我的站点已关闭,我已经在第三天了,Digital Ocean 支持人员告诉我他们在配置中没有发现问题。但是网站挂了。 在下一页上,它显示安全连接有问题。

https://www.ssllabs.com/ssltest/analyze.html?d=todocontenidoweb.com

现在有几件事让我相信我在以下配置中有问题: 在 /etc/nginx/sites-enabled$ 我有 3 个文件,其中之一是我的网站 todocontenidoweb.com 在 todocontenidoweb.com:

server {
listen 80;
listen [::]:80;
server_name todocontenidoweb;
server_tokens off;
root /home/forge/todocontenidoweb.com/public;

在server_name行所有网页内容;我明白我应该放 todocontenidoweb.com www.todocontenidos web.com 但它不允许我这样做,如果我这样做,它会在证书中给我一个错误。 如果有人能帮我解决这个问题,我将不胜感激。

版本

File: /etc/nginx/sites-available/mydomain.com

# FORGE CONFIG (DO NOT REMOVE!)
#include forge-conf/todocontenidoweb.com/before/*;

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    server_name todocontenidoweb.com www.todocontenidoweb.com;
    server_tokens off;
    root /home/forge/todocontenidoweb.com/public;

    # FORGE SSL (DO NOT REMOVE!)
    # ssl_certificate;
    # ssl_certificate_key;

    # ssl_protocols TLSv1.2 TLSv1.3;
    # ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY13>
    # ssl_prefer_server_ciphers off;
    # ssl_dhparam /etc/nginx/dhparams.pem;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    # FORGE CONFIG (DO NOT REMOVE!)
    #include forge-conf/todocontenidoweb.com/server/*;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/todocontenidoweb.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

server {
    listen 80;
    listen [::]:80;

    server_name todocontenidoweb.com www.todocontenidoweb.com;

    return 302 https://$server_name$request_uri;
}

# FORGE CONFIG (DO NOT REMOVE!)
#include forge-conf/todocontenidoweb.com/after/*;

//编辑

正如您在下面看到的,该站点正在返回 301 响应并重定向到 https 站点,但是您的 none 的 nginx 配置 运行 在端口 443 上

//编辑结束

您的 nginx 配置似乎有问题。似乎您的配置只允许端口 80 而不是 443。浏览器希望将 443 作为端口(除非您另外指定)作为 ssl 端口。似乎您正在使用一些重定向将用户从 http 重定向到 https,唯一的问题是您没有 运行 端口 443 上的任何 https 服务。

我可能是你的 nginx 配置有问题。确保具有 ssl 输入的 server 条目,以及端口 443 上的 运行。

如果你安装了 let's encrypt ssl,你可以尝试 generate certificate manually and then you can modify nginx config to run on port 443 as ssl

您可以从 digitalocean 关注 this guide,只需将证书路径替换为 lets-encrypt 一个

编辑 2:

我认为这部分不应该被注释掉

    # FORGE SSL (DO NOT REMOVE!)
    # ssl_certificate;
    # ssl_certificate_key;

    # ssl_protocols TLSv1.2 TLSv1.3;
    # ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY13>
    # ssl_prefer_server_ciphers off;
    # ssl_dhparam /etc/nginx/dhparams.pem;

因为您基本上没有通过 443 端口提供任何 ssl 证书。

这是来自 DigitalOcean 的示例服务器。如您所见,他们正在提供私钥和 public 密钥。生成证书后,您需要输入这些证书的路径。

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

    server_name your_server_ip;

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
}

编辑结束