Налаштування https в apache »

Нового тут нічого не буде, все це мільйони разів описано в документації і подібних записах по блогам. Так що залишу тут цю замітку для себе, щоб не шукати кожного разу, коли це буде потрібно.

У двох словах - що таке HTTPS і з чим його їдять.

HTTPS - це розширення протоколу HTTP. що підтримує шифрування. Дані, що передаються подібним чином, шифруються з використанням SSL або TLS.

У цій статті буде створюватися самоподпісанний сертифікат і хоча браузери почнуть лаятися, що такий сертифікат не є довіреною, але своє завдання виконувати він все таки буде, тобто якщо і не виключить можливість прослуховування за допомогою тих же сніфферов, наприклад, але, щонайменше, сильно ускладнить життя деяких хацкери. І що важливо - такий сертифікат не буде коштувати ні копійки, на відміну від сертифікатів, підписаних компаніями-сертификатора :)

В першу чергу сгенерируем приватний ключ RSA і запит на підписання сертифіката CSR.

Після виконання другої команди необхідно відповісти на питання, які будуть вискакувати. Важливо, щоб в поле Common Name потрапило доменне ім'я сайту, припустимо, dbadmin.example.org

Наступними діями прибираємо парольний фразу з отриманого раніше ключа. Можна цього і не робити, але тоді Apache буде питати її при кожному перезапуску, що не завжди зручно. Та й сервер може бути перевантажений без вашої участі.

І останній крок, власне генерація сертифікату dbadmin.crt. який в зазначеному прикладі закінчиться через 365 днів.

Тепер приступимо до налаштування Apache. Переконаємося в тому, що модуль mod_ssl активований. В іншому випадку просто активуємо його.

Налаштуємо віртуальні хости. Якщо ж на сервері один хост, то можна колупатися в одному файлі - default-ssl. Але все ж будемо вважати, що хостів на сервері більше, ніж один. Додамо відсутню за замовчуванням (в Убунту, за інших не скажу) директиву NameVirtualHost для 443 порту. В Ubuntu це можна виконати в файлі /etc/apache2/ports.conf

Налаштовуємо віртуальний хост, забороняючи при цьому застарілий криптографічний протокол SSLv2 і організовуючи перенаправлення, якщо хтось прийде на сайт за протоколом HTTP (mod_rewrite повинен бути включений). Приблизно таким чином:

Перезавантажуємо апач і радіємо. Якщо радість не наступила, то шукаємо де була допущена помилка :)

UPD: Якщо потрібно при цьому організувати правильний редирект зі старих урлов на нові, тобто з http на відповідні https. то трохи змінимо налаштування віртуального хоста: