6.2. Настройка сертификатов HTTPS

6.2.1. Создание на сервере директории под сертификаты

SSL-сертификат состоит из двух частей: сам сертификат и публичный ключ. Для хранения их нужно создать директорию ssl и перейти в нее:

# mkdir /etc/nginx/ssl

# cd /etc/nginx/ssl

6.2.2. Определение правильного Common Name для сертификата

Далее нужно определить имя хоста, для которого в дальнейшем будем генерировать сертификат. Использование сертификатов, выписанных на неправильное имя хоста, вызывает ошибки и предупреждения в браузерах. Ввести в терминал команду hostname -f:

Рисунок 6.7. Определение Common Name

Определение Common Name

6.2.3. Настройка разрешения имени сервера

Это имя должно разрешаться на IP-адрес нашего сервера. Для проверки нужно просмотреть файл /etc/hosts:

Рисунок 6.8. Проверка сопоставления

Проверка сопоставления

6.2.4. Генерация сертификата

Далее переходим к генерации обоих частей сертификата: сам сертификат и его публичный ключ:

# openssl req -new -x509 -days 35600 -nodes -out cert.pem -keyout cert.key

После этой команды интерактивно последуют несколько вопросов, касающихся необходимых параметров сертификата. Обратите внимание на «Common Name». Рекомендуется значение, равное доменному имени сервера.

Генерация ключей:

Рисунок 6.9. Генерация ключей

Генерация ключей

Перепроверим, что все данные о сертификате заполнились верно:

# openssl x509 -in cert.pem -noout -text

Рисунок 6.10. Проверка правильности заполнения

Проверка правильности заполнения

6.2.5. Применение сертификата в nginx

Сертификат готов, осталось прописать его в настройки nginx. В конфигурационном файле /opt/synergy/utils/configs/nginx/synergy-base необходимо обновить настройки, определяющие путь к сертификату, и опцию, позволяющую отключить HTTP и безальтернативно перенаправлять все запросы на HTTPS:


    # Also enable HTTPS

    # Make sure you have proper key

    # and certificatre in proper paths

    listen 443 ssl;

    keepalive_timeout    70;

    ssl_certificate      /etc/nginx/ssl/cert.pem;

    ssl_certificate_key  /etc/nginx/ssl/cert.key;

    # Redirect all HTTP queries to HTTPS

    # if ($scheme = http) {

    #     return 301 https://$server_name$request_uri;

    # }

6.2.6. Блокирование обходного незащищённого доступа

Несмотря на то, что теперь система доступна через https, порт 443 и даже при попытке входа по http, порту 80 будет перенаправлять на https, порт 8080 останется доступным, т.е. останется одна возможность обойти шифрование. Для устранения этого недостатка можно сделать следующее: заблокировать Jboss Synergy от любых соединений, кроме соединений с localhost, а т.к. nginx работает на этом же самом localhost, он сможет устанавливать соединения, следовательно, только правила nginx будут регулировать соединения. Для этого открыть на редактирование файл /etc/default/arta-synergy-jboss и заменить строку BIND_ADDRESS="0.0.0.0" на BIND_ADDRESS="127.0.0.1".

После этого перезапустить Jboss: # /etc/init.d/arta-synergy-jboss restart