Самоподписанный SSL сертификат: создание и установка

Здравствуйте, в статье пойдет речь о создании и установке уже имеющегося 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 закончена.