В этой статье я объясню, как создать сертификат SSL на сервере Ubuntu 18.04 с веб-сервером Nginx.
SSL означает «Secure Sockets Layer», который является стандартной технологией безопасности, предназначенной для создания зашифрованной связи между веб-сервером и веб-сервером.
Эта ссылка гарантирует, что вся информация, передаваемая между сервером и браузером, остается конфиденциальной и безопасной.
Основная цель сертификатов SSL заключается в обеспечении безопасности веб-сайта и шифровании данных, передаваемых между клиентом и браузером, для предотвращения кражи конфиденциальной информации, такой как данные кредитной карты, номера счетов и пароли и т. д.
Самоподписанный сертификат – это сертификат, подписанный лицом, создающим его, а не доверенным центром сертификации (ЦС).
Большинство клиентов и организаций испытывают соблазн использовать самоподписанные SSL-сертификаты вместо выпущенных и проверенных доверенным центром сертификации в основном из-за разницы в стоимости.
Но он по-прежнему обеспечивает такой же уровень шифрования
- Предпосылки
- Создание самоподписанного сертификата
- Настройка Nginx для использования самоподписанных сертификатов
- Шаг 1. Создание конфигурации фрагмента с данными SSL-сертификата.
- Шаг 2. Создание конфигурации фрагмента для поддержки параметров Strong и Secure SSL, преодолевающих возможные уязвимости SSL.
- Шаг 3. Обновление виртуального хоста домена с помощью приведенных выше настроек фрагмента для включения 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.
Он отобразит предупреждение о безопасности, так как мы используем самоподписанный сертификат, вы можете игнорировать это предупреждение и нажать ок,чтобы продолжить дальше, как показано в снимке.