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