NginX:HTTPS连接被拒绝

时间:2018-06-27 14:06:17

标签: ubuntu ssl nginx lets-encrypt

我已经使用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;
    }
}

如何解决该问题?

我的操作系统是Ubuntu 16.04。 NginX版本:1.10.3内置OpenSSL 1.0.2g,已启用TLS SNI支持。

更新。

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

  1. 使用具有DNS所有权批准的www.sslforfree.com。

  2. 使用以下OpenSSL命令:

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

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

不幸的是,两个证书文件集均无效。

2 个答案:

答案 0 :(得分:0)

我个人不喜欢在同一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;
    }
}

答案 1 :(得分:0)

我找到了解决方案。这是关于创建$(document).ready(function() { $('.pole').change('input', function() { var val = $(this).val(); }); }); 的过程,其中应包含证书和CA捆绑软件的数据。它的结构很简单,如下所示:

ca_chain.crt

然后,在NginX配置中:

-----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-----

ssl_certificate /aivanf/ssl/ca_chain.crt; ssl_certificate_key /aivanf/ssl/ca.key; 与我以前所说的ca.key