Как создать самоподписанный сертификат SSL для Nginx на Ubuntu 18.04

В этой статье я объясню, как создать сертификат  SSL на сервере Ubuntu 18.04 с веб-сервером Nginx.

SSL означает «Secure Sockets Layer», который является стандартной технологией безопасности, предназначенной для создания зашифрованной связи между веб-сервером и веб-сервером.

Эта ссылка гарантирует, что вся информация, передаваемая между сервером и браузером, остается конфиденциальной и безопасной.

Основная цель сертификатов SSL заключается в обеспечении безопасности веб-сайта и шифровании данных, передаваемых между клиентом и браузером, для предотвращения кражи конфиденциальной информации, такой как данные кредитной карты, номера счетов и пароли и т. д.

Самоподписанный сертификат — это сертификат, подписанный лицом, создающим его, а не доверенным центром сертификации (ЦС).

Большинство клиентов и организаций испытывают соблазн использовать самоподписанные SSL-сертификаты вместо выпущенных и проверенных доверенным центром сертификации в основном из-за разницы в стоимости.

Но он по-прежнему обеспечивает такой же уровень шифрования

Предпосылки

Хорошо настроенный сервер с привилегиями root и библиотекой OpenSSL.

Библиотека OpenSSL требуется для создания собственного сертификата.

Выполните следующую команду на своем сервере ubuntu, чтобы узнать, установлен ли у вас OpenSSL.

# which openssl
/usr/bin/openssl

Если which команда не вернула двоичный файл, нам нужно будет установить его с помощью команды:

# apt install openssl

Создание самоподписанного сертификата

SSL состоит в основном из двух частей: один — это закрытый ключ и другой публичный сертификат.

Ключ SSL хранится на сервере ограниченным пользователем root.

Он фактически используется для шифрования содержимого, отправленного клиентам.

Открытый SSL-сертификат предоставляется всем, кто запрашивает контент.

Его можно использовать для дешифрования содержимого, подписанного связанным с ним частным ключом SSL.

Здесь я использую эту команду для создания сертификата, а именно example.com.crt и private key example.com.key, используя инструмент OpenSSL.

 # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem 

Пожалуйста, ознакомьтесь с информацией по каждому из вариантов ниже:

req: Эта подкоманда используется для создания нового сертификата X.509. «X.509» — это стандарт инфраструктуры открытых ключей, который поддерживает SSL и TLS для управления ключами и сертификатами.
-x509: Это дополнительно изменяет предыдущую подкоманду, сообщая утилите, что мы хотим сделать сертификат.
-nodes: Это используется, чтобы пропустить опцию passphrase для защиты нашего сертификата.
-days 365: эта опция устанавливает срок действия сертификата в днях. Мы устанавливаем его на год.
-newkey rsa: 2048: Указывает, что мы хотим сгенерировать новый ключ RSA длиной 2048 бит вместе с сертификатом.
-keyout: Этот параметр сообщает OpenSSL, куда поместить сгенерированный файл закрытого ключа.
-out: Этот параметр указывает OpenSSL, где размещать сгенерированный сертификат.

Во время выполнения этой команды нам будет предложено предоставить данные о домене / клиенте для создания запроса подписи сертификата (CSR).

Вы можете предоставить эти данные по мере необходимости.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:admin@example.com

Теперь у нас есть новый самоподписанный сертификат, а секретный ключ — это: /etc/ssl/certs/example.com.pem и /etc/ssl/private/example.com.key.

Затем мы должны создать сильную группу Диффи-Хеллмана.

Вы можете запустить эту команду для ее создания.

 #o penssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 

Это может занять некоторое время, но когда это будет сделано, у нас будет сильная группа DH в /etc/ssl/certs/dhparam.pem, которую мы можем использовать в нашей конфигурации.

Настройка Nginx для использования самоподписанных сертификатов

Прежде чем мы начнем, мы должны убедиться, что веб-сервер Nginx установлен на нашем сервере Ubuntu 18.04.

Если он не установлен, вы можете установить его с помощью этой простой команды:

#apt install nginx 

Я установил и включил эту службу на своем сервере.

# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)

#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx

Шаг 1. Создание конфигурации фрагмента с данными SSL-сертификата.

Давайте создадим новый файл конфигурации snippet, а именно «self-signed.conf», для указания наших сгенерированных сведений о самоподписываемом сертификате внутри папки фрагмента Nginx: /etc/nginx/snippets/, как показано ниже:

# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

Здесь нам нужно указать наш путь к  сертификату: /etc/ssl/certs/example.com.pem и путь ключа: /etc/ssl/private/example.com.key для директивы, как указано выше.

Шаг 2. Создание конфигурации фрагмента для поддержки параметров Strong и Secure SSL, преодолевающих возможные уязвимости SSL.

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

Я настроил свой Nginx с помощью сильного набора SSL-шифров и включил некоторые дополнительные функции для обеспечения безопасности сервера.

Все эти параметры включены в файл: /etc/nginx/snippets/ssl-params.conf

cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Как вы можете видеть, мы установили параметр ssl_dhparam для указания на файл Diffie-Hellman, который мы сгенерировали ранее.

После внесения этих изменений вы можете сохранить конфигурацию и выйти.

Шаг 3. Обновление виртуального хоста домена с помощью приведенных выше настроек фрагмента для включения SSL.

Мы готовы с нашей необходимой конфигурацией фрагментов, теперь мы можем включить их в наш виртуальный хост домена и включить SSL.

Здесь, в этой статье, я использую файл конфигурации по умолчанию Nginx, расположенный по адресу /etc/nginx /sites-available/default.

Я изменил этот файл, чтобы включить SSL и получить сгенерированные самоподписанные сертификаты.

См. Измененный раздел ниже в этой конфигурации:

cat /etc/nginx/sites-available/default

#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;

Теперь мы можем сохранить эти конфигурации и перезапустить службу Nginx, чтобы эти изменения вступили в силу.

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx

Тестирование

Это наш последний шаг, когда мы можем открыть наш браузер и попытаться получить доступ к нашему серверному IP по URL >> https: // Server_IP или Hostname.

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

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40