Здравствуйте, в статье пойдет речь о создании и установке уже имеющегося SSL сертификата (SSL-cертификаты позволяют работать по защищенному https соединению).
Незащищённое http-соединение опасно тем, что любой, кто слушает трафик, прекрасно видит все данные, которые вы передаете на сайт, по протоколам POST или GET. Так как мы не хотим, что-бы злоумышленники получили доступ к нашему серверу, а тем более к нашим базам данных – для этого нам необходим специальный сертификат, который мы будем устанавливать на сервер. Как правило, сертификаты подтверждают центры сертифирации (из наиболее известных сертификаты Comodo SSL, RapidSSL и др.), ознакомиться более подробно с видами SSL сертификатов, вы можете здесь.
Но мы можем сгенерировать сертификат самостоятельно – такой сертификат называется самоподписанным, так как его подтверждаете лично вы. Для сайтов, на которых хранятся важные данные самоподписанный сертификат, конечно, не подойдет, но для личных целей например phpmyadmina вполне будет достаточно.
Обращаю ваше внимание на то, что при использовании самоподписного сертификата вы будете видеть окно: “Сертификат безопасности сайта не является доверенным”, что может быть не очень понятно неосведомленным пользователям.
Создание самоподписанного SSL-сертификата и настройка хоста apache2
Итак, приступим: для начала необходимо активировать соответствующий модуль apache, для любого дистрибутива это можно сделать командой:
sudo a2enmod ssl
Создаем директорию, где будут находиться наши ключи:
sudo mkdir /etc/apache2/ssl
Для CentOS,Fedora (данные действия необходимо выполнять от рута):
mkdir /etc/httpd/ssl
Генерируем ключ, не забываете пароль от ключа (минимальная длинна пароя 4 символа, рекомендуемая длинна 8 и более символов). Для данного действия необходим пакет openssl установить его можно командой (для Debian, Ubuntu):
apt-get install openssl
sudo openssl genrsa -des3 -out server.key 1024
Так же, можно создать не шифрованную копию ключа (необходим ключ с шифрованием):
sudo openssl rsa -in server.key -out server.key.insecure
Для Сentos, Fedora команды отличаются только установкой пакета openssl:
yum install openssl; yum clean all;
Лучше создать не шифрованную копию ключа – для бытовых целей подойдет. Если вам нужна более высокая безопасность, ключ без шифрования делать не стоит.
Переименуем ключи, что бы по умолчанию использовать ключ без шифрования:
sudo mv server.key server.key.secure
sudo mv server.key.insecure server.key
Создадим файл сертификата:
sudo openssl req -new -key server.key -out server.csr
Далее вам необходимо будет сообщить информацию о себе. При заполнении поля Common name, убедитесь, что название домена полностью соответствует тому, что вы хотите защитить.
Далее, перейдем к процессу самоподписания сертификата:
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
На этом сертификат готов далее необходимо скопировать файлы в необходимую нам директорию. Создадим каталог где будут лежать ключи:
#debian,ubuntu
sudo mkdir /etc/apache2/ssl
#fedora,CentOS
su
mkdir /etc/httpd/ssl
После, копируем ключи:
#debian,ubuntu
sudo cp server.crt /etc/apache2/ssl
sudo cp server.key /etc/apache2/ssl
#fedora,CentOS
su
cp server.crt /etc/httpd/ssl
cp server.key /etc/httpd/ssl
На этом этапе подготовка сертификата закончена – перейдем к настройке веб сервера.
Установка SSL сертификата на веб сервер apache
Нам необходимо создать конфигурационный файл который будет поддерживать ssl:
#debian,ubuntu
sudo touch /etc/apache2/sites-available/example
sudo nano/etc/apache2/sites-available/example
И внести в него изменения:
<VirtualHost *:80> говорим ждать соеденения на 80 порту
<Directory /var/www/example/public_html> #директория где расположен сайт
AllowOverride All
</Directory>
DocumentRoot /var/www/example/public_html #корневая директория где расположен сайт
ServerName yourdomain.com #имя вашего сервера
</VirtualHost>
<VirtualHost *:443> #говорим ждать соеденения на 443 порту
SSLEngine on #Подключаем SSL
SSLCertificateFile /etc/apache2/ssl/server.crt # файл сертиофиката
SSLCertificateKeyFile /etc/apache2/ssl/server.key # файл ключа
<Directory /var/www/var/www/example/public_html> #корневая директория где расположен сайт
AllowOverride All
</Directory>
DocumentRoot /var/www/example/public_html #корневая директория где расположен сайт
ServerName yourdomain.com #имя вашего сервера
</VirtualHost>
Активируем хост:
sudo a2ensite example
После чего, говорим Apache, что необходимо ждать соединение на порту 443, редактируем файл:
sudo nano /etc/apache2/ports.conf
Прописываем этот блок в конец файла если он отсутствует:
<IfModule mod_ssl.c>
Listen 443
</IfModule
Перезапускам веб-сервер:
apache2ctl restart
#fedora,CentOS
Отредактируем основной файл конфигурации httpd.conf:
su
nano /etc/httpd/conf/httpd.conf
Добавляем в конец файла:
<VirtualHost *:443> #говорим ждать соеденения на 443 порту
SSLEngine on #Подключаем SSL
SSLCertificateFile /etc/httpd/ssl/server.crt # файл сертиофиката
SSLCertificateKeyFile /etc/httpd/ssl/server.key # файл ключа
<Directory /var/www/var/www/example/public_html>
AllowOverride All
</Directory>
DocumentRoot /var/www/example/public_html
ServerName yourdomain.com
</VirtualHost>
Перезапускаем веб сервер:
service httpd restart;
Если вы не можете подключиться к сайту по ssl, необходимо настроить брендмауэр:
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/service iptables save
iptables -L -v
На этом настройка SSL закончена.