Статьи

OpenNET: стаття - Створення SSL сертифікатів для зв'язки Apache і mod_ssl (ssl crypt apache mod_ssl)

Створення SSL сертифікатів для зв'язки Apache і mod_ssl (ssl crypt apache mod_ssl)
Ключові слова: ssl

, crypt , apache , mod_ssl , ( знайти схожі документи )
From: Sergei Karasiov < [email protected] > Newsgroups: email Date: Mon, 17 Sep 2003 14:31:37 +0000 (UTC) Subject: Створення SSL сертифікатів для зв'язки Apache і mod_ssl Исходник: http://slacksite.com/apache/certificate.html Оригінал перекладу: http://blog.spb.ru/apache_modssl.html Переклад: Sergei Karasiov < [email protected] > Створення SSL сертифікатів для зв'язки Apache і mod_ssl Передмова перекладача Цей текст не є дослівним перекладом англійського оригіналу. Це спровоковано частково лінню перекладача, почасти пробілами в його (перекладача) освіту. Однак цей текст може послужити непоганим стусаном (starting point) для початку досліджень не тільки модуля mod_ssl, але і пакету openssl в цілому. Тим більше що за ідеологічну адекватність перекладу я поручитися все ж спробую. У всякому разі, стиль і дух твору я чесно намагався зберегти. Непогано знаючи характер вітчизняного читача, я можу припустити, що деякі очевидні подробиці (такі, наприклад, як розповідь про змінну PATH) можуть розлютити і образити потенційного споживача даного тексту, який вважає себе цілком професіоналом, що не потребує подібних підказках. Однак, про стиль і дух я сказав вище і більш додати нічого не можу. Доповнення і конструктивна критика - вітаються. Авторське право на переклад належить перекладачеві. Публікація цього тексту дозволена в будь-якому вигляді, за умови, що дане передмову НЕ буде вилучено з опублікованого тексту. Посилання на автора перекладу (як ви вже здогадалися) при публікації обов'язкове. СПБ-09-2003 Інтродукція Передбачається, що цей документ буде коротким посібником по генерації та встановлення SSL сертифікатів на сервер Apache з встановленим модулем mod_ssl. Хоча це не дуже складний процес, він супроводжується запуском декількох довгих команд з великою кількістю ключів. Основних напрямів повинно бути достатньо для того, щоб ви могли згенерувати і встановити сертифікати для вашого сервера. Цей документ не призначений для обговорення процесів компіляції та установки сервера Apache і модуля mod_ssl. Для детальних інструкцій дивіться "Збірка Apache з mod_ssl і іншими модулями." - http://slacksite.com/apache/webserver.html Так само цей документ не призначений для докладного обговорення конфігурації SSL на серверах Apache. Будуть представлені приклади конфігурації простого віртуального хоста з використанням SSL, який повинен працювати в практично будь-якої стандартної ситуації. Ralf Engelschall, автор модуля mod_ssl, підтримує чудову документацію на http://www.modssl.org. Для того щоб більш детально дізнатися про конфігуруванні SSL або особливих випадках дивіться повну документацію на http://www.openssl.org/docs/. На додаток дистрибутив містить докладні сторінки мінлива, які доступні так само і в форматі HTML на http://www.openssl.org/docs/. Короткий розповідь про SSL Ця глава буде дуже коротким введенням в SSL, Secure Socket Layer. Криптографія дуже велика тема, яка становить буквально томи матеріалів. Наступний матеріал. це дуже спрощений погляд на те, як реалізований SSL і яку роль сертифікати грають в розглянутому нами випадку. В силу того, що інформація навмисно спрощена, можливі невеликі неточності. Звичайний веб-трафік йде через Інтернет незашифрованим. Таким чином, будь-який, хто має доступ до потрібних інструментів, може спостерігати за потрібне йому трафіком. Очевидно, що це може призвести до проблем, особливо в тих випадках, коли необхідні безпеку і приватність, наприклад при роботі з кредитками або в банківські транзакції. Протокол SSL використовується для шифрування трафіку між веб-сервером і веб-клієнтом (браузером). SSL використовує асиметричну криптографію, зазвичай відому як криптографія з відкритим ключем. У криптографії з відкритим ключем створюються два ключа, одні публічний. інший секретний. Все зашифроване за допомогою одного ключа може бути розшифровано тільки за допомогою іншого. Тобто дані, які були зашифровані секретним ключем сервера можуть бути розшифровані тільки за допомогою публічного ключа цього ж сервера, даючи впевненість що, дані прийшли звідти звідки треба. Якщо SSL використовує криптографію з відкритим ключем, для того щоб шифрувати потік даних йдуть через Інтернет, навіщо ж тоді потрібен сертифікат? Технічний відповідь на це питання, такий, що сертифікат насправді не потрібен. дані зашифровані і навряд чи можуть бути розшифровані третьою стороною. Однак сертифікати грають важливу роль в комунікаційному процесі. Сертифікат, підписаний довіреною СА (Certificate Authority), дає гарантію, що власник сертифіката. той за кого він себе видає. Без підписаного сертифіката ваші дані будуть зашифровані, однак, сервер, з яким ви контактуєте може бути не тим про який ви думаєте. Без сертифікатів такі порушення можуть бути часті. Генерація приватного ключа і CSR Програмний пакет openssl може бути використаний для генерації приватного RSA ключа і створення CSR. Він так само може бути використаний для створення самоподпісних сертифікатів які можуть бути використані для тестових цілей або внутрішнього користування. Програма, яка зазвичай використовується для вирішення цих завдань, відома як openssl. Вона повинна бути встановлена ​​в директорії / usr / local / ssl. Може бути, вам доведеться додати цю директорію в змінну PATH або ж перемістити цю програму в директорію, яка вже прописана в змінній PATH, для того щоб не писати повний шлях. Подальші приклади вважають, що openssl доступний вам без необхідності писати повний шлях. В першу чергу треба створити ваш приватний ключ. Це буде одна тисяча двадцять чотири бітний ключ стандарту RSA зашифрований з використанням алгоритму TripleDES і зберігається в форматі PEM, так що його можна буде читати як простий текст. Ми будемо використовувати кілька файлів для посилення випадковості і для того щоб зробити наш ключ більш скрутному. Текстові файли, які були стиснуті утилітою типу gzip. стануть хорошим вибором. Ключ генерується за допомогою такої команди, де file1: file2: etc є випадковими стислі файли. $ Openssl genrsa -des3 -rand file1: file2: file3 -out server.key Програма запропонує вам ввести пароль і збереже ключ у файлі server.key. Дуже важливо не забути пароль. Якщо ключ буде загублений або пароль буде забутий сертифікат стане даремний. Неможливо висловити як важливий приватний ключ для сертифіката. Якщо приватний ключ або пароль скомпрометовані сертифікат повинен бути скасований. Як мінімум це буде коштувати вам грошей заплачених за сертифікат. Було б гарною ідеєю зробити резервну копію на безпечному носії, такому як касета або дискета. Один неприємний сторонній ефект ключа з паролем це те що Apache буде щоразу запитувати пароль при старті. Зрозуміло що це не дуже зручно якщо тільки хтось не знаходиться постійно поруч на випадок перезавантаження або аварійної зупинки. mod_ssl включає в себе можливість використання зовнішньої програми замість вбудованого парольного діалогу. Можливо прибрати пароль з ключа. Якщо приватний ключ паче не зашифрований, важливо щоб файл його містить, був доступний на читання тільки користувачеві root. Якщо ваша система скомпрометована і третя сторона отримала ваш незашифрований приватний ключ, похідний сертифікат повинен бути скасований. Після того що ми сказали, використовуйте наступну команду для того щоб прибрати пароль з ключа. $ Openssl rsa -in server.key -out server.pem Після того як приватний ключ згенерований може бути згенерований запит на підпис сертифікатів (CSR ---). CSR може бути використаний двояко. В ідеалі CSR повинен бути посланий до CA такому як Tawte або VeriSign, які перевірять достовірність запитувача і видадуть підписаний сертифікат. Інший шлях - підписати CSR самостійно, що буде продемонстровано в наступному розділі. Під час генерації CSR вас попросять ввести деяку кількість інформації. Одне з питань буде Common Name (eg, YOUR name) []: Важливо щоб це поле містило повністю кваліфіковане ім'я домену вашого сервера. Якщо вебсайт має адресу www.domain.com- то ви повинні написати саме www.domain.com. Команда для створення CSR виглядає так. $ Openssl req -new -key server.key -out server.csr Приклад сесії показаний нижче. $ Openssl req -new -key server.key -out server.csr Using configuration from /usr/local/ssl/openssl.cnf Enter PEM pass phrase: Enter pass phrase here You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', The field will be left blank. ----- Country Name (2 letter code) [AU]: US State or Province Name (full name) [Some-State]: New Hampshire Locality Name (eg, city) []: Nashua Organization Name (eg, company ) [Internet Widgits Pty Ltd]: Domain.com, Inc. Organizational Unit Name (eg, section) [] :. Common Name (eg, YOUR name) []: www.domain.com Email Address []: [email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Генерація самоподпісанного сертифіката На цьому етапі вам необхідно згенерувати самоподпісанний сертифікат бо ви або не плануєте заводити сертифікат підписаний CA, або хочете потестувати нову реалізацію SSL поки CA підписує ваш сертифікат. Мій досвід спілкування з Tawte показує, що отримання сертифікату займає тиждень і більше. Час яке займає отримання сертифіката варіюється від того як швидко CA отримає необхідні документи. Тимчасовий сертифікат буде видавати помилку в клієнтському броузері від того, що CA невідомий і не перевірений. Для того щоб згенерувати сертифікат придатний протягом 60 днів введіть наступну команду. $ Openssl x509 -req -days 60 -in server.csr -signkey server.key -out server.crt Установка ключа і сертифіката Коли Apache і mod_ssl встановлені - створюються кілька піддиректорій в конфигурационной директорії Apache. Їх розташування залежить від того, як компілювався Apache. Якщо використовувати мої інструкції, компілюючи Apache, конфігураційна директорія буде / usr / local / apache / etc Директорії, які створює mod_ssl містять в собі файли ssl.crt, ssl.csr, і ssl.key Це гарне місце для зберігання сертифікатів, запитів на підпис і приватних ключів. Якщо у вас буде кілька хостів з SSL хорошою практикою стати включення в імена цих файлів імен захищаються хостів. Додаючи віртуальні хости до веб-сервера, я звичайно віддаю перевагу зберігати їх конфігурації в окремому файлі. Це дає впевненість, що всі зміни можуть бути швидко знайдені, і, заодно, не дозволяє основним конфігураційного файлу розростатися. Якщо все віртуальні хости збережені в файлі ssl.conf, то для того щоб Apache знайшов його і прочитав треба включити в основний конфиг следующюю рядок: Include /usr/local/apache/etc/ssl.conf Конфігурація віртуального хоста, що використовує SSL. Великі приклади конфігурації SSL для віртуальних хостів включені в файл /usr/local/apache/etc/httpd.conf.default, який встановлюється разом з mod_ssl. Ознайомтеся з документацією на mod_ssl для того щоб отримати більш детальну інформацію про можливості конфігурації. Простий хост використовує SSL в файлі конфігурації може бути прописаний так. SSL Virtual Hosts <IfDefine SSL> <VirtualHost _default_: 443> ServerAdmin [email protected] DocumentRoot / usr / local / apache / share / htdocs ServerName www.domain.com ScriptAlias ​​/ cgi-bin / / usr / local / apache / share / htdocs / cgi-bin / SSLEngine on SSLCertificateFile /usr/local/apache/etc/ssl.crt/server.crt SSLCertificateKeyFile /usr/local/apache/etc/ssl.key/server.pem SetEnvIf User-Agent ". * MSIE. * "nokeepalive ssl-unclean-shutdown CustomLog / usr / local / apache / var / log / ssl_request_log \"% t% h% {SSL_PROTOCOL} x% {SSL_CIPHER} x \ "% r \"% b "<VirtualHost > <IfDefine> Цей приклад створить віртуальний хост з ім'ям. який доступний через порт 443 (стандартний порт для протоколу https) сайти з IP адресою вашого сервера. Ви можете створювати скільки додаткових віртуальних хостів для вашого сервера скільки IP адрес він обслуговує. Просто додайте додаткові конфігураційні блоки <virtualhost> між Деректіву <IfDefine SSL> і </ IfDefine>. За архітектурним причин протокол SSL не дозволяє створювати name-based (HTTPS 1.1) віртуальні хости. Для того щоб створити новий віртуальний хост з підтримкою SSL на іншому IP адресу просто замініть _default_на новий IP. Пості додавання віртуального хоста до конфігураційного файлу Apache повинен бути зупинений і знову запущений для того щоб новий віртуальний хост заробив. На жаль це один з тих випадків коли проста відправка сигналу HUP не спрацює. Після перезапуску в залежності від того який (шифрований чи ні) ключ був використаний Apache може запитати у вас пароль або паролі. Введіть пароль, і все запрацює. Тепер ви можете використовувати ваш улюблений броузер для перегляду вмісту щойно створеного віртуального хоста захищеного SSL. Не забудьте використовувати префікс https: // замість http: //. Ви отримаєте вікно з попередженням, якщо ви використовували самоподпісанний сертифікат. Підтвердіть згоду і сторінка продовжить завантажуватися вже захищена за допомогою SSL. Статусна рядок вашого броузера повинна містити іконку у вигляді замку яка показує що стаття заблокована. От і все.

  • 1.1 , denis (??), 14:35, 09/08/2007 [ відповісти ] [ +++ ] [ · · · ]
+

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

А не навпаки? Шифрують публічним, а дешифрують секретним?


  • 1.6 , Torsten (?), 12:55, 04/03/2008 [ відповісти ] [ +++ ] [ · · · ]
+

/ - Спасибі, мені взагалі-то тільки по роботі з openssl потрібен був туторіал, але він був отриманий в такій мірі, в якій мені і хотілося :-)

  • 1.9 , ssl (??), 20:16, 02/10/2008 [ відповісти ] [ +++ ] [ · · · ]
+

/ - якщо з'являється помилка:
SSL_CTX_use_certificate_chain_file ....

то:
cat server.pem server.crt> needserver.pem

і в конфіги замість "server.pem" прописати "needserver.pem"

  • 2.10 , ssl (??), 20:19, 02/10/2008 [ ^ ] [ ^^ ] [ ^^^ ] [ відповісти ]
+

/ - але природно в такому випадку доведеться ЗАПРОВАДЖУВАТИ пароль

  • 1.11 , netkent (?), 20:18, 21/10/2009 [ відповісти ] [ +++ ] [ · · · ]
+

/ - Кому лінь займатися створенням сертифіката, можу вам зробити недорого пишіть в аську 238987959, є приклади робіт

Додати коментар

Спонсори:

Хостинг:



Якщо SSL використовує криптографію з відкритим ключем, для того щоб шифрувати потік даних йдуть через Інтернет, навіщо ж тоді потрібен сертифікат?
А не навпаки?
Шифрують публічним, а дешифрують секретним?

Новости