Рано или поздно ко всем администраторам сети приходит руководство, и просит сделать доступ к внутренним ресурсам сети компании через Интернет. Руководству, чрезвычайно приятно попивая сок, на Мальдивских берегах, мониторить прогресс решения поставленных задач в корпоративной системе управления проектами. Вот и становиться задача организации доступа.
Почитав литературу, я остановился на методе создания самоподписанных SSL сертификатов и программе Stunnel. Самозаверенный (самоподписанный) сертификат — специальный тип сертификата, подписанный самим его создателем. Технически данный тип ничем не отличается от сертификата, заверенного подписью удостоверяющего центра (УЦ), только вместо передачи на подпись в УЦ пользователь создаёт свою собственную сигнатуру.
Очень кратко суть технологии заключается в следующем:
Мы создаем свой центр сертификации. С помощью него создаем секретные ключи и сертификаты, подписанные нашим центром сертификации. Корневой сертификат помещается на сервер. Клиентский ключ и сертификат заносится в браузер клиента. При попытке подключиться к защищенному ресурсу, происходит проверка ключевой пары. Если все хорошо, то создается защищенный канал между сервером и браузером, в котором данные «упаковываются» в криптографический протокол SSL или TLS, тем самым обеспечивая защиту этих данных.
Сертификаты мы будем создавать при помощи open-source программы XCA. Программа поддерживает:
• все 32-bit MS Windows (95/98/NT/2000/XP);
• все BSD платформы (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X);
• все POSIX (Linux/BSD/UNIX-like OSes), OS X, FreeBSD, Linux.
В ней мы создаем базу данных нашего будущего центра сертификации, где будут храниться наши сертификаты.
Теперь необходимо создать корневой сертификат и ключ нашего центра сертификации.
Вкладка Private Keys-> New Keys -> В поле «Name» вводим CA и нажимаем кнопку «Create». Тем самым, мы создали секретный ключ нашего центра сертификации.
Создаем сертификат к нашему ключу.
Вкладка Certificates -> New certificates, в открывшемся окне в поле «Template for the new certificate» выбираем «[default] CA», нажимаем кнопку «Apply». Этим мы выбрали шаблон для создания самоподписанного корневого сертификата. Далее переходим на вкладку Subjects. Нам необходимо заполнить поля, которые будут занесены в корневой сертификат. Пример заполнения представлен на скриншоте.
Обратите внимание на поле «Private key». В нем должно быть указано имя нашего секретного ключа, на который мы делаем корневой сертификат.
Переходим на вкладку Advanced и нажимаем кнопку «Validate», далее кнопку «ОК».
Теперь у нас есть свой маленький центр сертификации.
Нам необходимо создать ключи и сертификаты пользователя и сервера. Делается это чрезвычайно просто.
Вкладка Certificate signing request -> New Request, в появившемся окне переходим на вкладку Subject и заполняем по аналогии с корневым сертификатом. Далее нажимаем кнопку «Generate a new key» и этим создаем секретный ключ, после чего нажимаем кнопку «ОК».
Мы только что создали запрос в наш центр сертификации, который видим на вкладке Certificate signing request. Нажимаем на нем правой кнопкой мышки и выбираем Sign. В появившемся окне в поле Signing выбираем Use this Certificate for signing. В поле ввода видим наш корневой сертификат CA, нажимаем «ОК». Итак, наши клиентский ключ и сертификат подписаны центром сертификации.
Таким же образом создаем ключ и сертификат для сервера Stunnel.
Экспортируем секретные ключи сервера и пользователя в формате PEM. Сертификат пользователя экспортируем в формате «PKCS #12 with Certificate chain».
PKCS#12 — один из стандартов семейства Public-Key Cryptography Standards (PKCS), опубликованных RSA Laboratories. Он определяет файловый формат, используемый для хранения секретных ключей в сопровождении с сертификатами, защищенный при помощи основанного на пароле симметричного ключа.
При экспорте программа запросит пароль на файл.
Смело, вбиваем придуманный пароль. В следующий раз нас попросят его ввести при импорте файла в браузер пользователя, так что пароль не забываем.
Сертификат нашего центра сертификации и сервера экспортируем в формат «CRT».
Описание всех остальных вкладок и полей можно найти в документации к программе.
В итоге у нас должно появиться:
• CA.crt – Корневой сертификат центра сертификации;
• Server.crt – Сертификат сервера;
• Server.pem – Секретный ключ сервера;
• User.pkcs12 – секретный ключ + сертификат клиента.
Теперь настроим Stunnel.
Пример файла конфигурации stunnel.conf:; Certificate/key is needed in server mode and optional in client mode
; Пути к секретному ключу и сертификату сервера
cert = /usr/local/etc/stunnel/server.crt
key = /usr/local/etc/stunnel/server.pem
; Protocol version (all, SSLv2, SSLv3, TLSv1)
sslVersion = SSLv3
; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/tmp/stunnel
setuid = stunnel
setgid = nogroup
pid = /stunnel.pid
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
; Authentication stuff
verify = 2
; CApath is located inside chroot jail
CApath = /certs
; It's often easier to use CAfile
; Путь к корневому сертификату центра сертификации
CAfile = /usr/local/etc/stunnel/ca.crt
; Some debugging stuff useful for troubleshooting
debug = 7
output = /var/log/stunnel.log
; Настройка
[https]
accept = 443
connect = 192.168.1.1:80
Осталось импортировать User.pkcs12 и CA.crt в браузер пользователя. При импорте User.pkcs12 нас попросят ввести пароль, тот самый который мы указывали при экспорте из нашего центра сертификации.
После всего, мы получим защищенный канал передачи данных между браузером и нашим ресурсом в локальной сети.
Ссылки:
1. xca.sourceforge.net — Официальный сайт программы XCA;
2. www.stunnel.org — Официальный сайт программы Stunnel.