1. Создание корневого сертификата CA в Mikrotik
Используя winbox, System-Certificates — Создать новый
Name: rcpcmCCR1036CA-3 (уникальное имя в списке сетрификатов микротика. У меня не с первого раза получилось rcpcmCCR1036CA-3)
Common Name: rcpcmCCR1036CA (может быть несколько сертификатов с одинаковым Common Name)
Key Size: 4096
Days Valid: 5475 (15 лет. пробовал 20 лет, в итоге получилась дефектная дата конца действия)
Правая кнопка мыши на получившемся сертификате -> Sign. В поле Certificate выбрать его же. В поле CA CRL host указать адрес узла со списком отзывов сертификата. В новых версиях можно указать доменное имя. В старых ip одного из интерфейсов. Я указал ip внешнего 195.178.203.1.
Статус стал KAT, хотя по идее должна быть еще L, означающая наличие CLR- списка отозванных сертификатов.
Экспортировать сертификат — Правая кнопка мыши на нем -> Export. Пароль вводить не надо. В Files появится файл с сертификатом. Его нужно забрать из winbox с помощью drag’n’drop в проводник.
2. Создание сертификата сервера
2.1. Создаю шаблон.
System-Certificates — Создать новый
Name: template-gw.rcpcm.org
Common Name: gw.rcpcm.org
Key Size: 4096
Days Valid: 5475
Вкладка Key Usage. Оставить отмеченными Digital signature, key enchipherment, tls server
Кнопка OK сохраняет шаблон.
2.2. Создаю сам сертификат.
Открыть свежесозданный шаблон, кнопка Copy — создать копию. В новой копии поменял Name на gw.rcpcm.org-4 (получился правильный сертификат с 4 попытки). Сохранил OK.
Подписал сертификат. В списке сертификатов правая кнопка мыши на gw.rcpcm.org-4. Sign. В поле CA выбрал rcpcmCCR1036CA-3
Статус стал KI. Экспортировать этот сертификат вроде как не надо.
3. Поднятие openVPN сервера без использования сертификатов клиента
3.1 Создаю пул адресов для клиентов
IP-Pool — создать новый
Name: ovpn-common
Addresses: 172.18.1.2-172.18.1.200 — будут выдаваться динамически подключаемым клиентам
3.2. Создаю профиль клиента
PPP — Profiles
Name: ovpn-common — моя фантазия
Local Address: 172.18.1.1 — адрес vpn-канала на стороне сервера. Этот адрес из подсети 172.18.0.0/24, взятый из разрешенного диапазона серых адресов 172.16.0.0/12 и не пересекается с 172.16.0.0/24, используемым в openVPN микротика КБ 123.
Remote Address: выбрать из списка пулов ovpn-common
Факультативно
Limits — Only one = yes — исключить несколько одновременных подключений одного пользователя.
Protocol — Use encryption — можно потребовать шифрование
3.3. Заводим пользователя
PPP — Secrets — создать нового
Name: — я думал, что должно совпадать с Common Name в будущем сертификате пользователя, но у меня ibogachev, а в сертификате bogachev
Service: — ovpn или any, если разрешаете использовать другие протоколы
Profile: выбрать ovpn-common
3.4. Настраиваем и включаем ovpn server
PPP — Interface — кнопка OVPN Server
Enabled: ДА
Port: установил 443
Mode: ip
Netmask: 24
Default profile: ovpn-common
Certificate: выбрать ранее созданный сертификат сервера gw.rcpcm.org-4
Require Client Certificate: сначала не включал, пока проверял возможность подключения без сертификата клиента. Потом включил.
Auth: sha1, md5
Chipher: blowfish 128, aes 128,192,256
4. Создаем сертификат и ключ клиента
4.1. Создаю шаблон.
System-Certificates — Создать новый
Name: template-ovpn-client
Common Name: template-client
Key Size: 4096
Days Valid: 730
Вкладка Key Usage. Добавить к отмеченным по умолчанию tls client
Кнопка OK сохраняет шаблон.
4.2. Создаю сам сертификат.
Открыть
свежесозданный шаблон, кнопка Copy — создать копию. В новой копии
поменял Name на bogachev-2 (bogachev уже был), а Common Name на bogachev. Сохранил OK.
Подписал сертификат. В списке сертификатов правая кнопка мыши на bogachev-2. Sign. В поле CA выбрал rcpcmCCR1036CA-3
Статус стал KA. Экспортировал этот сертификат. Установил пароль на экспортированный сертификат. В Files появились два файла .crt и .key. Перекинул их на свой комп.
4.3. Конвертировать полученный ключ клиента из формата pem в rsa
Делается это в любой системе, в которой установлен openssl
У меня это сервер dhcp. С помощью FileZilla скопировал ключ в home сервера dhcp, по ssh вошел на сервер dhcp и выполнил команду
openssl rsa -in выгруженный файл.key -out bogachev.key — если НЕ надо устанавливать пароль на ключ. При выполнении надо предьявить пароль ключа.
openssl rsa -aes256 -in выгруженный файл.key -out bogachev.key — если надо установить пароль на ключ. При выполнении надо предъявить
пароль выгруженного ключа и дважды пароль нового ключа.
С помощью FileZilla скопировал файл ключа bogachev.key c сервера dhcp на мой комп.
5. Настраиваем firewall на MikroTik
Добавил правила
input icmp interface=ether1-ext
forward 172.18.0.0/24 -> Lan
forward Lan -> 172.18.0.0/24
6. Присваиваю внешнему интерфейсу доменное имя
В Яндекс Коннект для зоны rcpcm.org добавляю запись gw 195.178.203.1 86400
7. Готовим конфиг для windows-клиента
Создаю папку C:\Users\пользователь_винды\OpenVPN\config\bogachev-nii
а в ней файл bogachev-nii.ovpn с содержимым
clientdev tunproto tcpremote gw.rcpcm.org 443floatverb 3tls-cipher DEFAULT:!EXP:!LOW:!MEDIUM:!PSK:!SRPauth-user-passroute-method exeroute-delay 2route 192.168.108.0 255.255.252.0 172.18.1.1route 192.168.100.0 255.255.254.0 172.18.1.1route 10.210.0.0 255.255.0.0 172.18.1.1<cert>——BEGIN CERTIFICATE———-END CERTIFICATE——</cert><key>——BEGIN RSA PRIVATE KEY———-END RSA PRIVATE KEY——</key><ca>——BEGIN CERTIFICATE———-END CERTIFICATE——</ca>
Причем строка tls-cipher DEFAULT:!EXP:!LOW:!MEDIUM:!PSK:!SRP нужна для старой версии RouterOS. У меня она 6.33.3. От умолчальной она отличается отсутствием :!kRSA
Внутрь тегов <cert>, <key> и <ca> вставляем полное содержимое файлов сертификата пользователя, ключа пользователя и сертификата CA.
8. Готовим конфиг для мобильного клиента
Делаю копию файла C:\Users\пользователь_винды\OpenVPN\config\bogachev-nii\bogachev-nii.ovpn и меняю на
clientdev tuntopology subnetproto tcpremote gw.rcpcm.org 443persist-tunpersist-keyverb 1auth md5cipher AES-256-CBCtls-cipher DEFAULT:!EXP:!LOW:!MEDIUM:!PSK:!SRPauth-user-passroute 192.168.108.0 255.255.252.0route 192.168.100.0 255.255.254.0route 10.210.0.0 255.255.0.0vpn-gateway 172.18.1.1
<cert>——BEGIN CERTIFICATE——
здесь сертификат——END CERTIFICATE——</cert><key>——BEGIN RSA PRIVATE KEY——
здесь ключ——END RSA PRIVATE KEY——</key><ca>——BEGIN CERTIFICATE——
здесь сертификат——END CERTIFICATE——</ca>
Включил использование сертификатов клиентами
PPP — Interface — кнопка OVPN Server
Require Client Certificate: ДА
Подключился к микротику и с винды и с андроида 8.0