Хобрук: Ваш путь к мастерству в программировании

NginX: HTTPS-соединения отклонены

Я создал сертификат SSL, используя Let's Encrypt, и теперь пытаюсь настроить его с помощью NginX. NginX использует мою конфигурацию, перезагружается и хорошо обрабатывает HTTP, но отказывается от соединения HTTPS.

Кроме того, на моем сервере нет брандмауэра. Проверил порт 443 с помощью netstat -peanut | grep ":443 " и NMap, проблем с ним нет.

У меня есть следующие файлы SSL:

  1. ca bundle.crt, 27 строк, начинается с -----BEGIN CERTIFICATE-----

  2. ca.crt, 35 строк, начинается с -----BEGIN CERTIFICATE-----

  3. private_rsa.key, 27 строк, начинается с -----BEGIN RSA PRIVATE KEY-----

  4. private.key, 28 строк, начинается с -----BEGIN PRIVATE KEY-----

Я не знаю, какие из них важны, поэтому я перепробовал все комбинации, но ничего не работает. Вот моя конфигурация 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.

Обновить.

Для создания сертификатов я использовал 2 разных подхода:

  1. Использование www.sslforfree.com с одобрением владельца DNS.

  2. Используя следующие команды OpenSSL:

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

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

К сожалению, оба набора файлов сертификатов не работали.


  • Как вы сгенерировали SSL-сертификат? Не могли бы вы обновить свой вопрос командой, которую вы выполнили? Вывод Let’s Encrypt должен выводить fullchain.pem, privkey.pem и другие файлы, но в большинстве случаев нужны только эти два. 27.06.2018
  • @dr.dimitru спасибо за ответ! Я добавил эти детали в вопрос. Я использовал эти способы, потому что нашел их наиболее удобными. 27.06.2018
  • Вы нашли решение? у меня такая же проблема 12.02.2020
  • @SaraTibbetts Да, я давно нашел решение! Я только что написал это для вас ???? Надеюсь, это поможет! 12.02.2020

Ответы:


1

Лично мне не нравится, когда 80 и 443 находятся в одном разделе server. Я также не уверен, что это проблема. Но не могли бы вы попробовать что-то подобное?

# 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;
    }
}
27.06.2018
  • Спасибо за ваш ответ! Я пробовал как ваш подход к разделению портов, так и просто отключению прослушивания 80, но результат тот же: verni-verni.ru unexpectedly closed the connection (Google Chrome) 28.06.2018

  • 2

    Я нашел решение. Речь шла о создании 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

    12.02.2020
    Новые материалы

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

    Случай использования npm3 вместо npm2 для разработки библиотеки
    Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...