Протокол SSL и его преемник TLS (Secure Sockets Layer / Transport Layer Security) добавляют уровень шифрования между клиентом и сервером. Без этой технологии данные отправляются на сервер в виде простого текста, что позволяет третьим лицам читать всю информацию, отправленную и полученную вашим сервером.
Из этого туториала вы узнаете, как создать сертификат SSL / TLS и активировать его в Apache 2.4 в Ubuntu 16.04. Я предполагаю, что Apache уже настроен и работает. Если вы хотите узнать, как установить стек LAMP, посмотрите этот документ Vultr .
Внимание
Сертификаты SSL / TLS обычно генерируются доверенным центром сертификации (центром сертификации). Создав его самостоятельно, вы станете подписывающим лицом, то есть браузер не сможет проверить, следует ли доверять удостоверению сертификата, и предупредит пользователя. Хотя это предупреждение можно обойти, общедоступные сайты должны использовать сертификат, подписанный доверенным центром сертификации. Давайте зашифруем это CA, который предлагает сертификаты бесплатно. Вы можете узнать, как установить их сертификат в Apache и Ubuntu 16.04 здесь .
Для внутренних приложений может быть допустимым использование самозаверяющего сертификата, особенно если у вас нет доменного имени.
Шаг 1: Генерация сертификата
-
Во-первых, давайте создадим место для хранения файла.
mkdir ~/certificates
cd ~/certificates
-
Создать CSR и закрытый ключ.
openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
Он запросит информацию для запроса сертификата. В комплекте с соответствующей информацией.
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: FL
Locality Name (eg, city) []: Miami
Organization Name (eg, company) [My Company]: My Company
Organizational Unit Name (eg, section) []:
Общее имя должно быть вашим доменным именем или IP-адресом сервера. Кроме того, заполните свою электронную почту.
Common Name (e.g. server FQDN or YOUR name) []: 203.0.113.122
Email Address []:[email protected]
-
Теперь переместите сертификат в папку конфигурации Apache.
mkdir /etc/apache2/ssl
mv ~/certificates/* /etc/apache2/ssl/.
-
Сертификат готов! Далее мы подготовим Apache для работы с сертификатом.
Шаг 2. Настройка брандмауэра
-
Мы должны убедиться, что TCP-порт 443 открыт. Этот порт используется в соединениях SSL вместо порта 80. В этом руководстве мы будем использовать UFW.
-
Убедитесь, что UFW включен.
sudo ufw enable
-
Теперь разрешите предопределенные настройки Apache для брандмауэра.
sudo ufw allow 'Apache Full'
-
Набрав « sudo ufw status
», вы можете увидеть список текущих правил. Ваша конфигурация должна выглядеть следующим образом:
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
-
Вы также должны разрешить OpenSSH здесь для будущих подключений.
sudo ufw allow 'OpenSSH'
Шаг 3: Конфигурация виртуального хоста Apache
-
Перейдите в каталог конфигурации сайта Apache по умолчанию.
sudo nano /etc/apache2/sites-available/default-ssl.conf
-
Этот файл сообщает серверу, где искать сертификат SSL. С удаленными комментариями это должно выглядеть следующим образом.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
Отредактируйте эту строку:
ServerAdmin [email protected]
-
Добавьте это прямо под ServerAdmin
строкой:
ServerName ADD_YOUR_IP_OR_DOMAIN_NAME_HERE
-
Теперь отредактируйте эти строки с нашим расположением сертификата:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
-
Наш окончательный файл должен выглядеть примерно так:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName 203.0.113.122
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
Сохраните и закройте файл.
Шаг 4: Включение модуля Apache SSL
-
Включите модуль SSL, набрав:
sudo a2enmod ssl
-
Теперь включите сайт, который мы только что отредактировали:
sudo a2ensite default-ssl.conf
-
Перезапустите Apache:
sudo service apache2 restart
-
Давайте перейдем на новый защищенный сайт! Откройте его в браузере (убедитесь, что вы набрали https: // ).
https://YOUR_SERVER_IP
Ваш браузер предупредит вас о том, что сертификат недействителен, как мы и ожидали. Это происходит потому, что сертификат не подписан. Следуйте инструкциям вашего браузера, чтобы перейти на ваш сайт.
Шаг 5. Перенаправьте весь HTTP-трафик на HTTPS (необязательно).
-
Откройте файл виртуального хоста Apache по умолчанию:
nano /etc/apache2/sites-available/000-default.conf
-
Добавьте эту строку внутри <VirtualHost *:80>
тега:
Redirect / https://YOUR_SERVER_IP_OR_DOMAIN/
-
Перезагрузите конфигурацию Apache:
sudo service apache2 reload
Весь трафик сайта теперь будет автоматически перенаправляться на HTTPS.