Настройка OpenVPN в iOS

в 16:09, , рубрики: iOS, openvpn, vpn, Песочница, метки: , ,

Тихо и незаметно прошел релиз клиента OpenVPN для iOS. Для многих, в том числе и для меня, это может стать последней причиной для отказа от Jailbreak'а. Для тех, кто желает более подробно узнать о возможностях клиента на текущий момент, а так же о подводных камнях настройки, добро пожаловать под хабракат.

Скачать клиент OpenVPN Connect можно из iTunes На текущий момент, по информации с форума разработчиков, он доступен в магазинах всех стран, кроме Франции. Задержки связаны с необходимостью получения Encryption Import License и носят временных характер.

Ограничения, присутствующие в приложении:

  • Размер файла настроек не может превышать 256KB. Тем не менее, этого должно быть достаточно даже для хранения файла конфигурации в унифицированном ovpn формате, о котором будет сказано чуть позже.
  • Поддерживаются только tun соединения из-за ограничений iOS VPN API.
  • Не поддерживается ряд директив в конфигурационном файле: dev tap, tls-remote, fragment, mssfix.
  • Не поддерживается работа клиентов без сертификатов. Эта возможность появится в будущем релизе.
  • Возможно использовать только шифрование AES или Blowfish. Связано это с тем, что данные алгоритмы больше адаптированы под архитектуру ARM. Таким образом достигается большая энергоэффективность.
  • Использование HTTP прокси настраивается на уровне настроек приложения, а не в конфигурационном файле.
  • Использование контейнеров PKCS#12 возможно только, если они импортированы в связку ключей iOS. Такое поведение является настоятельной рекомендацией разработчиков, потому, что в отличие от хранения закрытого ключа прямо в ovpn файле, оно обеспечивает более высокий уровень сохранности секретных данных. Особенно в случае использования устройства с jailbreak.

Перейдем к настройке нашего OpenVPN. Сначала серверная часть (пример приведен для Linux). Используем easy-rsa для генерации сертификатов и закрытых ключей удостоверяющего центра (CA), сервера (server.crt и server.key) и клиента (ios.crt и ios.key). Так же сгенерируем параметры алгоритма Диффи-Хелмана.

./vars
./build-ca
./build-key-server server
./build-key ios
./build-dh

Для большей безопасности так же сгенерируем ключ TLS аутентификации.

openvpn --genkey --secret ta.key

Общий вид конфигурации сервера представлен ниже:

proto udp
dev tun0

topology subnet	

option server "10.19.2.0 255.255.255.0"

push "dhcp-option DNS 8.8.8.8"
push "route 10.19.1.0 255.255.255.0"

keepalive "10 120"

cipher AES-128-CBC
comp_lzo 1

persist_key 1
persist_tun 1

ca ca.crt
cert server.crt
key server.key

dh dh1024.pem

tls-auth "ta.key 0"

Теперь перейдем к конфигурации клиента. Наиболее важный момент настройки заключается в том, что закрытый ключ клиента должен быть в формате RSA. Если вы делали все согласно инструкции на сайте OpenVPN, или у вас уже были готовые ключи, то их необходимо предварительно конвертировать. Для этого можно использовать openssl:

openssl rsa -in ios.key -out ios_rsa.key

Теперь соберем все необходимые ключи и сертификаты в один PKCS#12 контейнер:

openssl pkcs12 -export -in ios.crt -inkey ios_rsa.key -certfile ca.crt -name ios -out ios.p12

Обязательно укажите пароль для экспорта. Установить контейнера без пароля на экспорт в связку ключей iOS не получится. Полученный контейнер передаем на устройство через электронную почту или Safari.
Для организации файла конфигурации клиента будем использовать унифицированный ovpn формат. Общий вид конфигурации представлен ниже.

client
tls-client
dev tun
proto tcp

remote адрес_сервера
resolv-retry infinite

key-direction 1

cipher AES-128-CBC

persist-tun
persist-key

comp-lzo
verb 3

redirect-gateway

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
#содержимое ta.key
-----END OpenVPN Static key V1-----
</tls-auth>

<ca>
-----BEGIN CERTIFICATE-----
#содержимое ca.crt
-----END CERTIFICATE-----
</ca>

Полученный файл можно импортировать на ваше iOS устройство через iTunes (рекомендуемый вариант) или через электронную почту.

Полезные ссылки

OpenVPN HOWTO
OpenVPN Connect
OpenVPN Connect (iOS) forum

Автор: Infactum

Источник

Поделиться

* - обязательные к заполнению поля