nixp.ru v3.0

29 мая 2017,
понедельник,
08:55:52 MSK

DevOps с компанией «Флант»
Аватар пользователя Vlad Borovcov
Vlad Borovcov написал 26 апреля 2008 года в 07:29 (6215 просмотров) Ведет себя как благородный джентельмен; открыл 35 тем в форуме, оставил 70 комментариев на сайте.

Доброго времени суток!

Может кто-нибудь подробно или популярно рассказать, как в Apache с подключенным модулем mod_ssl сделать, чтобы работает ssl, тоесть можно было бы обращаться к сервере через HTTPS?

Значую, что MAN-ы рулез форева, но не могу разобраться всё равно(

Anarchist

Для начала уточняющий вопрос: о каком Индейце идёт речь?

443 порт слушается?

extra/httpd-ssl.conf подключен (для 2.0 и 2.2)?

Как пускаешь? Для 1.3 вместо apache start следует говорить apache startssl.

А ещё можно потешить самолюбие саморекламой :) Не совсем то, что спрашивается, но тема вопроса также раскрыта (если не предполагается доступ по обычному протоколу http, то нефиг слушать 80-й порт!)

<font color=«blue»>www.nixp.ru/articles/freebsd_apache_php_oracle_v2</font>

И устаревшая и носящая скорее исторический интерес (хотя нет, вру, не только исторический) версия:

<font color=«blue»>www.nixp.ru/articles/freebsd_apache_php_oracle</font>

Vlad Borovcov

Честно говоря никак не пускаю пока что. Нашел кучу манов на www.opennet.ru.

не помогло. Я просто не разу этого не делал.

Есть сервер, виртуальный, на нём стоит Linux Gentoo, есть доступ по SSH, Webmin, Usermin, FTP.

Но толку от этого мало.

Можешь посоветовать какой-нибудь мануал, написанный мягко говоря, для идиотов, чтобы всё было понятно? например, какую-нибудь пошаговую инструкцию.

А, хочу добавить, на сервере уже болтается 37 виртуальных хостов HTTP, FTP, но HTTPS нужно сделать только для одного из них, естественно, не нарушив работу остальных.

Anarchist
Vlad Borovcov
Честно говоря никак не пускаю пока что. Нашел кучу манов на www.opennet.ru.

не помогло. Я просто не разу этого не делал.

Мнение о качестве материалов на opennet’е изрядно завышено относительно действительности.

Vlad Borovcov
Есть сервер, виртуальный, на нём стоит Linux Gentoo, есть доступ по SSH, Webmin, Usermin, FTP.

Но толку от этого мало.

Ну ты бы хотя бы на прямые вопросы отвечал бы что ли…

Gentoo => ожидается 2.2.

Vlad Borovcov
Можешь посоветовать какой-нибудь мануал, написанный мягко говоря, для идиотов, чтобы всё было понятно? например, какую-нибудь пошаговую инструкцию.

Инструкций для домохозяек нет и не предвидится.

Vlad Borovcov
А, хочу добавить, на сервере уже болтается 37 виртуальных хостов HTTP, FTP, но HTTPS нужно сделать только для одного из них, естественно, не нарушив работу остальных.

Если Apache 2.2, и Gentoo…

То сначала надо понять как там оно всё сделано.

Конфиги в студию.

А также — читать первую из приведённых статей и генерить сертификаты.

Vlad Borovcov

прочитал статей. Поставил пакет openssl, сгенерировал сертификат и ключ.

Дальше, насколько я понял, нужно где-то прописать директиву listen 443, но где?

Anarchist
Vlad Borovcov
прочитал статей. Поставил пакет openssl, сгенерировал сертификат и ключ.

Дальше, насколько я понял, нужно где-то прописать директиву listen 443, но где?

Ты так и не понял сути задачи.

Далее тебе медитировать над выводом

# ls /etc/apache2

После чего привести листинг

# ls /etc/apache2/vhosts.d

И сказать для какого виртуального хоста нужно сделать доступ по SSL и какой доступ делаем (т.е. оставляя доступ по HTTP или запрещая его, проводя проверку клиентского сертификата или не проводя).

Vlad Borovcov

/etc/apache2/:

4vhosts.conf

apache2-builtin-mods

magic

webalizer.conf

access.conf

httpd.conf

modules.conf

modules.d

vhosts.d

—————————

vhosts.d: там есть, но не то что нужно.

Все виртуальные хосты почему то были засунуты вебмином в httpd.conf:

NameVirtualHost *:80

ServerName itc-labs.ru

ServerAlias www.itc-labs.ru

DocumentRoot /home/itc/public_html

ErrorLog /home/itc/logs/error_log

#CustomLog /home/itc/logs/access_log combinedScriptAlias /cgi-bin/ /home/itc/cgi-bin/

CustomLog /home/itc/logs/access_log_for_stat combined

Options Indexes IncludesNOEXEC FollowSymLinks

allow from all

AllowOverride All

allow from all

SSL (HTTPS) нужно сделать только для домена itc-labs.ru, но при этом:

то, что лежит в корне сервера, должно работать также как работало. В папке с веб-содержимым есть php скрипты, некоторые из которых должны работать только через HTTPS.

Тяжело ли такое реализовать?

Anarchist
Vlad Borovcov
vhosts.d: там есть, но не то что нужно.

Все виртуальные хосты почему то были засунуты вебмином в httpd.conf:

Еблан разворачивавший сервер явно не в курсе философии Gentoo.

Его к этому серверу нельзя было подпускать на пушечный выстрел.

Vlad Borovcov
NameVirtualHost *:80

ServerName itc-labs.ru

ServerAlias www.itc-labs.ru

DocumentRoot /home/itc/public_html

ErrorLog /home/itc/logs/error_log

#CustomLog /home/itc/logs/access_log combinedScriptAlias /cgi-bin/ /home/itc/cgi-bin/

CustomLog /home/itc/logs/access_log_for_stat combined

Options Indexes IncludesNOEXEC FollowSymLinks

allow from all

AllowOverride All

allow from all

SSL (HTTPS) нужно сделать только для домена itc-labs.ru, но при этом:

то, что лежит в корне сервера, должно работать также как работало. В папке с веб-содержимым есть php скрипты, некоторые из которых должны работать только через HTTPS.

Тяжело ли такое реализовать?

Короче, для того, чтобы сделать этот виртальный хост SSL, тебе нужно:

1. В основной части конфига httpd.conf добавить

Listen 443 # SSL живёт на стандартном выделенном порту.
...
Timeout 22000
...
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 1800
...
##
## SSL Global Context
##
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
...
# Pass Phrase Dialog:
SSLPassPhraseDialog builtin
...
# Inter-Process Session Cache:
SSLSessionCache dbm:logs/ssl_scache
SSLSessionCacheTimeout 300

(если там такого нет)

2. В секции определяющей конкретный целевой вирутальный хост прописать

SSLEngine on
...
# SSL Cipher Suite:
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
...
# Server Certificate:
SSLCertificateFile /etc/apache2/ssl/server-1.crt
...
# Server Private Key:
SSLCertificateKeyFile /etc/apache2/ssl/www.server-1.key
...
# Certificate Authority (CA):
SSLCACertificateFile /etc/ssl/ca.crt
...
# Certificate Revocation Lists (CRL):
#SSLCARevocationFile /etc/ssl/revoked.crl # Оно тебе на данном этапе скорее всего не нужно
...
# Client Authentication (Type):
#SSLVerifyClient require # И это тоже скорее всего избыточно.
#SSLVerifyDepth 10

3.

# /ets/init.d/apache2 restart
Vlad Borovcov

Сделал…

апач пускается нормально.

Если зайти на сайт по 80 порту, то всё в порядке. Если ломиться по https, то вижу следующее:

Ошибка при установлении защищённого соединения

При соединении с itc-labs.ru произошла ошибка.

SSL получило запись, длина которой превышает максимально допустимую.

(Код ошибки: ssl_error_rx_record_too_long)

Anarchist
Vlad Borovcov
апач пускается нормально.

Ещё бы не пускался.

Кстати, я забыл процитировать рекомендованный к объявлению httpd-ssl.log

CustomLog "/var/log/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


Vlad Borovcov
Если зайти на сайт по 80 порту, то всё в порядке.

Хуйня полная.

После внесения указанных изменений по 80-му порту он тебя вообще не должен был пустить.

443 порт он у тебя слушает (в linux — netstat, точный формат команды навскидку не приведу)?

Vlad Borovcov
Если ломиться по https, то вижу следующее:

Ошибка при установлении защищённого соединения

При соединении с itc-labs.ru произошла ошибка.

SSL получило запись, длина которой превышает максимально допустимую.

(Код ошибки: ssl_error_rx_record_too_long)

В логах чего-нибудь интересное на этот счёт пишет?

Помнится, ещё во времена 2.2.4 была какая-то муть с SSL и разруливанием вирутальных хостов по именам.

Попробуй обратиться по https с указанием IP-адреса.

Vlad Borovcov

http://itc-labs.ru — работает

https://itc-labs.ru — не работает, ошибка (текст ошибки в предудыщем посте)

http://itc-labs.ru:443 — работает, но говорит Forbidden. => на 443 порту сервер слушает.

Anarchist
Vlad Borovcov
При соединении с itc-labs.ru произошла ошибка.

SSL получило запись, длина которой превышает максимально допустимую.

(Код ошибки: ssl_error_rx_record_too_long)

<font color=«blue»>В переводе «SSL_ERROR_RX_RECORD_TOO_LONG» означает</font> (она же — ошибка -12263):

"SSL received a record that exceeded the maximum permissible length."
This generally indicates that the remote peer system has a flawed implementation of SSL, and is violating the SSL specification.

Что-то до боли знакомое… Вот только навскидку не припомню что.

Давай конфиг виртуального хоста и что есть в основном применительно к SSL!

Vlad Borovcov
http://itc-labs.ru — работает

https://itc-labs.ru — не работает, ошибка (текст ошибки в предудыщем посте)

http://itc-labs.ru:443 — работает, но говорит Forbidden. => на 443 порту сервер слушает.

1. — работать не должен.

2. — похоже вспомнил: попытка установления SSL-соединения с адресом не поддерживающим SSL.

3. — правильно. Ты же пытаешься обратиться по http на порт https].

Vlad Borovcov

в директории modules.d есть файл 40_mod_ssl.conf.

Его содержимое:

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl .crl

SSLPassPhraseDialog builtin

SSLSessionCache shmcb:/var/run/ssl_scache(512000)

SSLSessionCacheTimeout 300

SSLMutex file:/var/run/ssl_mutex

# vim: ts=4 filetype=apache

httpd.conf:

Include /etc/apache2/modules.d/*.conf

#———————————————--

Listen 443

Timeout 22000

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 1800

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl .crl

# Pass Phrase Dialog:

SSLPassPhraseDialog builtin

# Inter-Process Session Cache:

SSLSessionCache dbm:logs/ssl_scache

SSLSessionCacheTimeout 300

#———————————————--

Include /etc/apache2/vhosts.d/*.conf

#NameVirtualHost 89.111.184.165:80

NameVirtualHost *:80

ServerName itc-labs.ru

ServerAlias www.itc-labs.ru

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /etc/apache2/ssl/server.crt

SSLCertificateKeyFile /etc/apache2/ssl/server.key

#SSLCACertificateFile /etc/ssl/certs/ca.crt

DocumentRoot /home/itc/public_html

ErrorLog /home/itc/logs/error_log

CustomLog /home/itc/logs/access_log_for_stat combined

Options Indexes IncludesNOEXEC FollowSymLinks

allow from all

AllowOverride All

allow from all

Anarchist

Ты хоть конфиг читал???

Не уподобляйся профессорам информатики!!!

Vlad Borovcov

Попробуй заменить на

Vlad Borovcov
Anarchist
Ты хоть конфиг читал???

Не уподобляйся профессорам информатики!!!

Попробуй заменить на

заменить то я попробую заменить. А что сделать чтобы сайт работал и на http и на https?

Anarchist
Vlad Borovcov
заменить то я попробую заменить.

Уж будь добр, сделай такое одолжение…

Vlad Borovcov
А что сделать чтобы сайт работал и на http и на https?

А смысл?

Сам же говорил, что не все скрипты работают по http…

+ соображения безопасности.

Просто создаёшь два виртуальных хоста (один ssl, один — обычный) на один DocumentRoot.

ЗЫ: Кстати, ты забыл добавить описание лога запросов SSL. Оно неправильно.

Vlad Borovcov

Нет. Надо всё таки сделать чтобы и на HTTPS и на HTTP работал сайт. Всё должно работать на HTTP, но там будет два скрипта, для оплаты онлайн. Они должны будут работать в защищённом соединении.

Anarchist
Vlad Borovcov
Всё должно работать на HTTP, но там будет два скрипта, для оплаты онлайн. Они должны будут работать в защищённом соединении.

А вот тут я не вполне уверен в том, что ты пошёл правильным путём.

Vlad Borovcov
Anarchist
А вот тут я не вполне уверен в том, что ты пошёл правильным путём.

Хм. а можешь посоветовать, где искать, где копать, кроме opennet.ru и google? :)

Anarchist
Vlad Borovcov
Хм. а можешь посоветовать, где искать, где копать, кроме opennet.ru и google? :)

Скажу хуже: к opennet’у рекомендую относиться с изрядным скепсисом. Ибо качество бОльшей часть материалов там мягко говоря оставляет желать лучшего.

Vlad Borovcov

Хм… я всё-таки это сделал! Opennet.ru — must die… со совими статьями и инструкциями…

Оказывается надо было изменить namevirtualhost на *:443.

тогда https работает… потом просто всё полученное скопировал, выключил SSL и сказал слушать на порту 80. получилось два одинаковых хоста, которые юзают одинаковые логи, у которых одинаковая home-директория, только первый слушает на 443 порту и у него включена SSL engine, а другой — на 80 и у него всё как было до внесения настроетк и создания этой темы в форуме…

to Anarchist — большое спасибо за советы :) Это просто я немного тупил…

Anarchist
Vlad Borovcov
Opennet.ru — must die… со совими статьями и инструкциями…

Я об этом сразу предупреждал :)

ЗЫ: Шурупову: в FAQ? :)))

Vlad Borovcov

Кстати, ещё во время всех этих экспериментов обнаружил, отчего можно нарваться на ошибку make_sock при запуске апача.

Если в виртуальном хосте фигурирует директива Listen, с любым параметром, то в глобальной конфигурации её не должно быть вообще, а в других виртуальных хостах — должна…

Или наоборот. Если в глобальной конфигурации есть Listen 80 и Listen 443, но в виртуальных хостах этого уже писать не надо, они и так будут работать на этих портах…