Поиск по сайту:

Как создать и использовать самоподписанный SSL в Apache


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

Создать и самостоятельно подписать SSL-сертификат

Мы будем использовать утилиту openssl для создания сертификата и соответствующего закрытого ключа. Скорее всего, он у вас уже установлен, так как он зависит от Apache, но если он каким-то образом отсутствует, вы можете установить его из диспетчера пакетов вашего дистрибутива. Для систем на основе Debian, таких как Ubuntu, это будет:

sudo apt-get install openssl

После установки openssl вы можете сгенерировать сертификат с помощью следующей команды:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache.key -out /etc/ssl/certs/apache.crt

openssl запросит у вас некоторую информацию о вашей организации. Вы можете оставить большую часть этого поля пустым, но одна важная вещь, которую вам нужно будет заполнить, — это «Общее имя», которое вы хотите установить на IP-адрес или доменное имя вашего сервера.

Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []: your_ip_address
Email Address []:

openssl запустится и сгенерирует новый закрытый RSA-ключ, который используется для подписи сертификата и сохранения его в /etc/ssl/private/apache.key. . Сам сертификат хранится в /etc/ssl/certs/apache.crt и будет действителен в течение года.

Мы также хотим создать группу Диффи-Хеллмана. Это используется для полной прямой секретности, которая генерирует эфемерные ключи сеанса, чтобы гарантировать, что прошлые сообщения не могут быть расшифрованы, если ключ сеанса скомпрометирован. Это не совсем необходимо для внутренних коммуникаций, но если вы хотите быть максимально безопасным, вам не следует пропускать этот шаг. Обратите внимание, что для этого требуется Apache версии 2.4.8 или выше, поэтому убедитесь, что у вас установлена последняя версия.

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Это займет некоторое время — около часа, в зависимости от скорости вашего сервера. Перекусите и через некоторое время вернитесь к своему терминалу, чтобы настроить Apache.

Настройте Apache для использования вашего самозаверяющего сертификата

Чтобы упростить задачу, мы выполним всю нашу настройку в файле фрагмента. Создайте новый в каталоге Apache sites-available (вот как найти папку конфигурации Apache).

sudo touch /etc/apache2/conf-available/ssl-params.conf

Откройте его в своем любимом текстовом редакторе и вставьте следующую конфигурацию:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Первый блок устанавливает несколько параметров SSL по умолчанию, а последняя строка настраивает Apache для использования группы Диффи-Хеллмана. Вы можете опустить эту строку, если пропустили этот шаг.

Затем откройте файл виртуального хоста SSL по умолчанию, обычно расположенный по адресу /etc/apache2/sites-available/default-ssl.conf. Измените следующие строки, чтобы они указывали на ваш сертификат и файл ключа:

SSLCertificateFile /etc/ssl/certs/apache.crt
SSLCertificateKeyFile /etc/ssl/private/apache.key

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

Кроме того, вам нужно настроить перенаправление для перенаправления HTTP-трафика на зашифрованный HTTPS. Откройте конфигурацию Apache по умолчанию в /etc/apache2/apache2.conf и добавьте следующие строки для перезаписи HTTP-трафика:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

Вы также должны убедиться, что ваш брандмауэр открыт. HTTPS использует порт 443, а не порт 80, поэтому вам нужно открыть его для подключения к серверу. Если вы используете iptables или UFW, вы можете открывать порты из командной строки. Если вы размещаете свой сервер в таком сервисе, как AWS, ваш провайдер может предоставить вам веб-интерфейс для открытия портов.

Самоподписанные сертификаты чаще всего используются для частных серверов, поэтому было бы неплохо внести в белый список доступ только к вашей частной локальной сети и использовать VPN-сервер для подключения к ней.

Когда порты открыты, вы можете проверить свои настройки SSL, перейдя на свой сайт в браузере. Если все работает правильно, вы должны увидеть это предупреждение:

Это нормально, так что не волнуйтесь. Вам придется вручную выбрать, что вы доверяете этому сертификату, поэтому вы не можете использовать самозаверяющие сертификаты для общедоступных сайтов.

Предупреждение не означает, что ваш сайт небезопасен — SSL по-прежнему включен и шифрует трафик. Если ваш закрытый ключ скомпрометирован, то сообщение может быть расшифровано, но оно будет полностью безопасным, если вы настроите прямую секретность Диффи-Хеллмана, которая сводит на нет этот вектор атаки. Проблема здесь с идентификацией. Chrome не может подтвердить, что вы тот, за кого себя выдаете, или что вы являетесь владельцем домена, для чего вам понадобится «настоящий» ЦС.