NginX:HTTPS 连接被拒绝

NginX: HTTPS connections refused

我已经使用 Let's Encrypt 创建了 SSL 证书,现在正尝试使用 NginX 对其进行设置。 NginX 使用我的配置,重新启动并很好地处理 HTTP,但拒绝 HTTPS 连接。

另外,我的服务器没有防火墙。我用netstat -peanut | grep ":443 "和NMap检查了443端口,没有问题。

我有以下 SSL 文件:

  1. ca bundle.crt,共27行,以-----BEGIN CERTIFICATE-----

  2. 开头
  3. ca.crt, 35行,以-----BEGIN CERTIFICATE-----

  4. 开头
  5. private_rsa.key,共27行,以-----BEGIN RSA PRIVATE KEY-----

  6. 开头
  7. private.key,28行,以-----BEGIN PRIVATE KEY-----

  8. 开头

我不知道哪些是重要的,所以我尝试了所有的组合,但没有任何效果。这是我的 NginX 配置:

server {
    listen 80;
    listen 443 ssl;
    server_name  domain.ru www.domain.ru;

    ssl_certificate /var/www/SSL/ca.crt;
    ssl_certificate_key /var/www/SSL/private.key;


    access_log  /var/www/Ret/Returner/logs/nginx.access.log;
    error_log  /var/www/Ret/Returner/logs/nginx.error.log;

    proxy_read_timeout 950s;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/Ret/Returner/;
    }
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}

如何解决问题?

我的 OS 是 Ubuntu 16.04。 NginX 版本:1.10.3 使用 OpenSSL 1.0.2g 构建,启用了 TLS SNI 支持。

更新。

为了生成证书,我使用了两种不同的方法:

  1. 使用 www.sslforfree.com 并获得 DNS 所有权批准。

  2. 使用以下 OpenSSL 命令:

openssl genrsa 4096 > /var/www/Ret/account.key

openssl rsa -in /var/www/Ret/account.key -pubout

不幸的是,两个证书文件集都不起作用。

我个人不喜欢在同一个 server 部分中使用 80 和 443。 我也不确定这是否是一个问题。但是你能试试这样吗?

# Redirect all http to https
server {
    listen 80 default_server;
    rewrite ^ https://$host$request_uri? permanent;
}

# Handle https
server {
    server_name domain.ru www.domain.ru;
    listen 443 ssl http2;

    # Certificates
    ssl_certificate /var/www/SSL/ca.crt;
    ssl_certificate_key /var/www/SSL/private.key;

    # Logs
    access_log  /var/www/Ret/Returner/logs/nginx.access.log;
    error_log  /var/www/Ret/Returner/logs/nginx.error.log;

    proxy_read_timeout 950s;

    # Static Content
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/Ret/Returner/;
    }

    # Reverse Proxy
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}

我找到了解决办法。它是关于创建 ca_chain.crt 的,它应该包含您的证书和 CA 包的数据。它的结构很简单,如下:

-----BEGIN CERTIFICATE-----
MIIFXTCCBEWgAwIBAgISA1jUznaa6AUn/4wyOV49e1QBMA0GCSqGSIb3DQEBCwUA
// content of the ca.crt //
2PxVU6WNy9wOVgGdO5TaxRQgO2p04AYJpovREYCuOctz
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
// content of the ca_bundle.crt //
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----

然后,在 NginX 配置中:

ssl_certificate /aivanf/ssl/ca_chain.crt;
ssl_certificate_key /aivanf/ssl/ca.key;

这个ca.key和我之前叫的一样private.key