Ubuntu NginX:HTTPS连接被拒绝

Ubuntu NginX:HTTPS连接被拒绝,ubuntu,ssl,nginx,lets-encrypt,Ubuntu,Ssl,Nginx,Lets Encrypt,我已经使用让我们加密创建了SSL证书,现在尝试使用NginX进行设置。NginX使用我的配置,重新启动并很好地处理HTTP,但拒绝HTTPS连接 另外,我的服务器没有防火墙。我用netstat-peant | grep“和NMap检查了443端口,没有问题 我有以下SSL文件: ca bundle.crt,27行,以----开始证书------ ca.crt,35行,以----开始证书------ private\u rsa.key,27行,以开头------BEGIN rsa private

我已经使用
让我们加密
创建了SSL证书,现在尝试使用NginX进行设置。NginX使用我的配置,重新启动并很好地处理HTTP,但拒绝HTTPS连接

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

我有以下SSL文件:

  • ca bundle.crt
    ,27行,以
    ----开始证书------

  • ca.crt
    ,35行,以
    ----开始证书------

  • private\u rsa.key
    ,27行,以
    开头------BEGIN rsa private key------

  • private.key
    ,28行,以
    开头------开始私钥------

  • 我不知道哪些是重要的,所以我尝试了所有的组合,但没有任何效果。这是我的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;
        }
    }
    
    ssl_certificate /aivanf/ssl/ca_chain.crt;
    ssl_certificate_key /aivanf/ssl/ca.key;
    
    如何解决这个问题

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

    更新。

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

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

  • 使用以下OpenSSL命令:

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

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


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

    我个人不喜欢将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配置中:

    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;
        }
    }
    
    ssl_certificate /aivanf/ssl/ca_chain.crt;
    ssl_certificate_key /aivanf/ssl/ca.key;
    

    ca.key
    与我之前所说的
    private.key

    是如何生成SSL证书的?你能用你运行的命令更新你的问题吗?Let's Encrypt的输出应该输出
    fullchain.pem
    privkey.pem
    和其他文件,但在大多数情况下只需要这两个文件。@dr.dimitru感谢您的回复!我已经在Q中添加了这些细节。我使用这些方法是因为我觉得它们最方便。你找到解决方案了吗?我也一样issue@SaraTibbetts是的,我很久以前就找到了解决办法!我刚刚为你写的谢谢你的回复!我已经尝试了你分离端口和禁用监听80的两种方法,但结果都是一样的:
    verni-verni.ru意外地关闭了连接
    (谷歌浏览器)