Как же заставить web-сервер отдавать сайт по HTTPS? Причин заняться этим вопросом немало; даже если у вас нет интернет-магазина, покупатели которого, вполне естественно, хотели бы максимально обезопасить собственные транзакции - не забывайте, что без HTTPS даже при входе в административную панель управления Joomla или WordPress ваши пароли вполне могут быть доступны админу вашей офисной локальной сети, с которым вы не в лучших отношениях, например, и который вынужден подчиняться директиве своего начальства, перехватывая - а вдруг пригодится? - пользовательский трафик (на памяти не один такой случай)... ну или попросту начинающему хакеру среднего школьного возраста, научившемуся гуглить по фразе перехват паролей через Wi-Fi и сидящему за соседним с вами столиком ресторана быстрого питания.
А между тем, подобного рода опасений легко можно было бы избежать, настроив шифрование (TLS, Transport Layer Security — "безопасность транспортного уровня", следующее поколение криптографического протокола от SSL, Secure Sockets Layer — "уровень защищённых сокетов") на вашем веб-сервере. Не так уж это и сложно, поверьте. И почему это мне пришло в голову рассказать о настройке безопасного соединения HTTPS аккурат сразу после введения в России пресловутого пакета законов, получивших название "антитеррористических"... ладно. У меня, правда, вызывает некоторые сомнения сама по себе техническая возможность предоставления компетентным, хм, товарисчам "ключей используемого шифрования" в контексте сочетания современных реализаций алгоритма Диффи-Хеллмана и временных ключей, используемых сегодня вашим Яндекс-браузером, но... но у каждого ведь свое представление о необходимом и достаточном уровне компетенции. Словом, начнем.
Все очень несложно; нам с вами необходимо установить (если не установлены) парочку пакетов (mod_ssl и openssl), создать приватный ключ, CSR (Certificate signing request, запрос на сертификат) и еще один, самолично вами подписанный (допустим, на один год), ключ:
$ sudo yum install mod_ssl openssl
$ sudo openssl genrsa -out ca.key 2048
$ sudo openssl req -new -key ca.key -out ca.csr
$ sudo openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
По ходу дела придется ответить на ряд вопросов; один совет. Вы вполне сможете обойтись для начала без пароля для защиты закрытого ключа; кроме того: Country Name — это двухсимвольный код страны согласно ISO-3166 («RU» для России), Common Name - полностью определенное (FQDN) доменное имя; "Email Address", "A challenge password", "An optional company name" - не заполняются. Далее - переносим созданные ключи и серты в их рабочие директории:
mv ca.crt /etc/pki/tls/certs
mv ca.key /etc/pki/tls/private/ca.key
mv ca.csr /etc/pki/tls/private/ca.csr
Обновляем конфиг Apache SSL, имеющий место быть /etc/httpd/conf.d/ssl.conf , т.е. указываем верные пути для SSLCertificateFile и SSLCertificateKeyFile. И теперь осталось только создать новые VirtualHosts для ваших доменов; ровно те же самые директивы, что и уже созданные ранее для VirtualHosts на 80 порту, например:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory /var/www/masterpro>
AllowOverride All
</Directory>
DocumentRoot /var/www/masterpro
ServerName masterpro.ws
</VirtualHost>
Если ssl-сертификат не самопальный (самоподписанный, self-signed), а полученный в центре сертификации, добавляем еще и путь к корневому сертификату:
SSLCertificateChainFile /etc/pki/tls/certs/1_root_bundle.crt
Да, не забываем открыть 443 порт и рестартануть апач, предварительно его протестировав:
apachectl configtest
Удачи!