Прикручуємо SSL на Apache, Сервери, Інтернет-технології, статті

В’ячеслав Калошин, www.win.linuxnews.ru/

  Отже, мені знадобилося прикрутити до мого WWW-серверу SSL. Ситуація ускладнювалася 
 тим, що я не міг піти з версії 1.3.9 Apache, так як під більш новими не 
 компілювалися потрібні мені модулі.
 Спочатку нам необхідний сам Apache. Якщо у вас вже є зібране і працює 
 дерево apache, то скопіюйте його в безпечне місце. Якщо ні, то витягніть саму 
 останню версію Apache і розгорніть його.
 Одночасно я збирав SSL для 1.3.12 і 1.3.9 версії Apache.
 Для версії 1.3.9 необхідно взяти такі файли.
http://www.modssl.org/source/mod_ssl-2.4.10-1.3.9.tar.gz
ftp://ftp.openssl.org/source/openssl-0.9.4.tar.gz
 Для 1.3.12
ftp://ftp.modssl.org/source/mod_ssl-2.6.4-1.3.12.tar.gz
ftp://ftp.openssl.org/source/openssl-0.9.5a.tar.gz
 Зверніть увагу на відмінності у версіях.
 Нижче я буду в дужках давати команди для 1.3.12. Всі файли лежать в одному 
 каталозі. В ньому ж лежить дерево Apache.
gzip -d -c mod_ssl-2.6.4-1.3.9.tar.gz | tar xvf -
(gzip -d -c mod_ssl-2.6.4-1.3.12.tar.gz | tar xvf -)
gzip -d -c openssl-0.9.4.tar.gz | tar xvf -
(gzip -d -c openssl-0.9.5a.tar.gz | tar xvf -)
 Цими командами ми розпакували всі пакети.
cd openssl-0.9.4
(cd openssl-0.9.5a)
./config
make
 Отконфигурировать і зібрали openssl, пакет, який і буде забезпечувати 
 шифрування. Я рекомендую дати ще команду make install, після якої в 
 / Usr / local / ssl лежатиме це пакет.
cd ..
cd mod_ssl-2.6.4-1.3.9
(cd mod_ssl-2.6.4-1.3.12)
./configure --with-apache=../apache_1.3.9 --with-ssl=../openssl-0.9.4 --
prefix=/usr/local/apache
(./configure --with-apache=../apache_1.3.12 --with-ssl=../openssl-0.9.5a --
prefix=/usr/local/apache)
 Цією командою ми включили mod_ssl в число зібраних модулів для Apache.
 Тепер просто перейдіть в каталог з Apache і скажіть make - всі необхідні 
 модулі будуть зібрані. Так само, якщо у вас раніше були зібрані нестандартні 
 модулі, як у мене, вони нікуди не зникнуть і будуть теж вкомпіліровани.
make certificate
 Цією командою ви сгенеріруете тестові сертифікати, так що тут ви можете не 
 особливо думати над питаннями, можна просто тиснути Enter і вводити найтупіших 
 паролі.
make install
 Цією командою ви інсталюєте Apache в призначене для нього місце 
(/usr/local/apache).
 Все, можете спробувати запустити apache командою
/usr/local/apache/bin/apachectl startssl
 Якщо все запустилося (по команді ps ax | grep ht з'являються httpd-DSSL), то 
 можете себе привітати - воно зібралося. Спроба звернутися до хосту за протоколом 
 https не дасть вам нічого, так як сам Apache ще не налаштований.
 Отже, почнемо конфігурувати, відкриваємо в редакторі файл httpd.conf.
Listen 443
NameVirtualHost x.x.x.x:443
 Ці команди вказують Apache слухати 443 порт (стандартний порт для https) і 
 обслуговувати на ньому віртуальні сервери.
 Тепер додаємо опис віртуального сервера.

SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SSLLog /usr/local/apache/logs/ssl_engine_log
SSLLogLevel warn
SSLOptions +StdEnvVars
......

 Замість крапки напишіть інші директиви, які зазвичай вказуються в 
 цьому місці.
 Тепер можна спробувати перезапустити сервер. Опс, при запуску Apache вимагає 
 ввести парольну фразу. Звичайно, перший раз таке можна пережити, але таке 
 поведінка є неприйнятною для робочого сервера.
 Входимо в каталог з ssl.key
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key 
 Вводимо пароль для дешифрування
chmod 400 server.key
 І закриваємо файл з відритим ключем від сторонніх очей, все сервер більше не 
 питатиме пароль. На даному етапі вже повинен працювати SSL на повну 
 котушку. Тобто, набираючи https://host ви повинні отримувати запит браузера на 
 використання цього сертифіката.
 Для того, щоб надалі полегшити нам життя, подредактіруем трохи 
 bin / apachectl файл. Виправимо в ньому умову start на startold, а startssl на 
 просто start. Потім скопіюємо його в / etc / rc.d / init.d / httpd. Тепер за замовчуванням 
 при завантаженні сервера, буде запускатися Apache з підтримкою SSL.
 Щоб не мучитися з PATH, зробимо, щоб openssl запускався нормально.
cd /usr/local/bin
ln -s /usr/local/ssl/bin/openssl openssl 
 Отже, тепер будемо генерувати нормальні сертифікати, без всяких SnakeOil.
 Генеруємо ключ.
openssl genrsa -des3 -out server.key 1024 
 На даному етапі ми створили server.key, тепер генеруємо запит в службу 
 верифікації.
openssl req -new -key server.key -out server.csr
 Будьте обережні у відповідях, адже це потім побачать все. Якщо помилилися, все можн 
 повторити заново. Так, не помиліться, CommonName - це адреса хоста без http://
 Все, якщо ви отримали наступний напис, то запит згенерований правильно
You now have to send this Certificate Signing Request (CSR)
to a Certifying Authority (CA) for signing
 Але ми не буржуї, підписувати у нас нікому, тому ми буде самі
 підписувати себе. Хоча якщо у вас є гроші і вам необхідно підписати свій 
 сертифікат саме у глобальних авторизаційних центрів, то на modssl.org Ви 
 знайдете всі необхідні адреси та посилання.
openssl genrsa -des3 -out ca.key 1024
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
 Генеруємо підпис авторизаційного центру на рік (можна і на більше), процедура 
 полность схожа з генерацією ключа.
 Копіюємо sign.sh з pkg.contrib з пакету mod_ssl в каталог з ключами
 І підписуємо свій же запит
./sign.sh server.csr
 Отримавши напісь, що містить
Now you have two files: server.key and server.crt. These now can be used as 
following
 Починаємо радіти, все зібрано так, як треба. Копіюємо server.key і server.crt 
 на місце старих, але в каталозі c crt файлом Makefile не чіпаємо. Скопіювавши 
 новий. crt файл, наберіть make в цьому ж каталозі - він створить якийсь хеш файл.
 Все, тепер перезапустіть Apache і можете насолоджуватися тим, що ви зробили 
 власний WWW сервер, захищений за допомогою SSL.
 Перевірити захищеність ви можете подивившись інформацію про сертифікати або 
 з'єднанні в info-вікнах браузерів. Якщо ви їм не довіряєте, то дайте команду 
openssl s_client -connect localhost:443 -state –debug
 Вона виведе повністю всю інформацію, яку вона зможе вичавити з вашого SSL 
 сервера.
 Тепер про неприємне: на жаль, я поки не зміг розібратися, чому іноді 
 проскакують помилкові повідомлення для версії Apache 1.3.9 (НЕ для 1.3.12 - з ним 
 все в порядку).
 Наприклад, вищенаведена команда для версії 1.3.9 повертає помилку, говорячи про 
 неправильної версії протоколу, а для 1.3.12 відпрацьовує нормально. Остання 
 версія openssl (0.9.5a) взагалі не захотіла компілюватися з 1.3.9, довелося 
 ставити 0.9.4. Звичайно, шляхом брудного хака я змусив 0.9.5а компілюватися, 
 але це неправильно (до речі, MSIE відмовлявся працювати з цим хаком, коли NN 
 з'єднувався без проблем). У всіх конференція рекомендують брати найостанніші 
 версії всіх трьох пакетів. Швидше за все, якщо поподбірать версії, все збереться і 
 буде працювати взагалі без помилок. А з іншого боку - ну і що, що ось такі 
 от утиліти лаються, tcpdump або будь-який інший аналізатор трафіку показує, 
 що з'єднання зашифровано. Що нам потрібно було
 (С) 2000 В'ячеслав Калошин multik@sw.ru
 

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*