Apache с поддержкой ssl и аутентификацией | Apache

По сути шпаргалка для себя, поскольку тема описана в инете миллион раз, но как-то временами очень разрозненно. Итак задача – для ограничения пользователей к вебинтерфейсу какого-нибудь вебсервиса закрыть директорию апача паролем и предотвратить перехват пароля шифрованием с помощью openssl, плюс прописать сети из которых доступ к апачу разрешён, и закрыть всё это дополнительно фаерволлом…

Итак ставим апач с поддержкой mod_ssl.

Создаем папку для удобства – туда будем ключи складывать:

#mkdir /usr/local/etc/apache22/ssl
#cd /usr/local/etc/apache22/ssl

Генерим ключи:

Генерим секретный ключ (сразу обращаем внимание на то что имя ключа должно совпадать с именем вашего сервака – либо днс имя, либо айпи)

#openssl genrsa -des3 -rand /dev/random -out server.ru.key 1024

Предложит ввести парольную фразу – вводим. Если опустить параметр -des3 парольной фразы в процессе генерации не спросят.

Генерим запрос подписи сертификата (Certificate Signing Request)

#openssl req -new -key server.ru.key -out server.ru.csr

Отвечаем на вопросы. Самым важным будет CN – Common Name – это имя должно совпадать с именем вашего сервера на которое должен отзываться ваш апач – DNS имя или айпи.

Подписываем секретным ключом – получаем публичный ключ

#openssl x509 -req -days 365 -in server.ru.csr -signkey server.key -out server.ru.crt

Если вводили парольную фразу (использовали ключ -des3) – при запуске апач будет спрашивать её подтверждение при каждом запуске. Отключаем парольную фразу:

#openssl rsa -in server.ru.key -out server.ru.key

в принципе всё можно сделать одной строкой чтобы получить секретный и публичный ключи в одном файле с расширением .pem:

# openssl req -new -x509 -nodes -out server.ru.pem -keyout 195.210.154.                                                                              22.pem -days 3650
Generating a 1024 bit RSA private key
..................................++++++
.........++++++
writing new private key to 'server.ru.pem'
-----
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]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Metro Golden
Organizational Unit Name (eg, section) []:IT Department
Common Name (eg, YOUR name) []:server.ru
Email Address []:info@server.ru
post# ls
server.ru.pem

Далее апач:

Чтобы закрыть апач на 80 порту и оставить только 443 аккуратнее с дефолтными настройками апача. Делаем в httpd.conf:

Listen 443

PS: Если не изменить порт по дефолту – то можно спокойно пройти по 80 порту в закрытую директорию по http://server.ru/service даже если мы всё правильно пропишем в файле настройки виртуальных хостов с поддержкой ssl (../extra/httpd-ssl.conf).

Правим /usr/local/etc/apache22/extra/httpd-ssl.conf – прописываем пути к сертификатам, имя хоста и т.д.

Добавляем ограничение на директорию (указываем путь файла паролей апача и полсети и хосты с которых хотим разрешить доступ):

<Directory /usr/local/www/apache22/data>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /usr/local/www/apache22/data/.htpasswd
Require valid-user
Order allow,deny
Allow from 172.16.0.0/16 193.10.15.0/24 95.74.89.1 21.87.33.138
</Directory>

Создаем файл паролей апача, и добавляем юзеров:

#htpasswd -c /usr/local/www/apache22/data/.htpasswd admin

Перезапускаем апач:

#apachectl restart

В фаерволе открываем 443 порт и закрываем 80-й, указываем из какой подсети можно зайти на наш вебсервер:

${fwcmd} add allow tcp from 11.10.15.0/24 to 11.10.15.15 443 via em0
${fwcmd} add deny tcp from any to me 443 via em0
${fwcmd} add deny tcp from any to me 80 via em0
${fwcmd} add deny ip from any to any

Пытаемся зайти:

https://server.ru/service

ИЕ ругнется, остальные покажут сертификат. После того как мы согласимся что наш сертификат не подписан автризованным центром, апач спросит пароль – вводим. Всё ок.