Создайте свой openvpn для Android-клиента для генерации закрытого ключа в TEE - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу создать собственный клиент OpenVpn For Android, который удовлетворяет моим требованиям.В обычном режиме клиенты имеют файл конфигурации (файл .ovpn), который они используют для подключения к серверу OpenVpn.Процедура аутентификации может быть либо именем пользователя / паролем, либо на основе сертификата.Но я хочу, чтобы процедура генерации ключа выполнялась на клиенте (мобильном), а не на стороне сервера, а закрытый ключ остается полностью закрытым, а сервер не имеет к нему доступа.

Я имею в виду изменение кода openvpn для клиента Android для генерации ключа.создать пару в TEE (доверенная среда выполнения) мобильного устройства, а затем создать CSR (запрос на подпись сертификата), а затем отправить файл CSR на сервер Openvpn, а сервер подписывает файл CSR и создать CRT (файл сертификата) и отправить обратно клиенту.Клиент сохраняет файл CRT в TEE и в следующий раз связывается с сервером OpenVpn, используя закрытый ключ / сертификат.

Возможен ли этот сценарий?Кто-нибудь имеет какие-либо идеи о реализации этой функции?

1 Ответ

0 голосов
/ 23 ноября 2018

Я имею в виду изменение кода openvpn для клиента Android для генерации пары ключей в TEE (доверенной среде выполнения) мобильного телефона

Это легко сделать в TEE.Предполагая, что вы используете OPTEE-OS, например, вы можете использовать API глобальной платформы для генерации пары ключей из вашего доверенного приложения.Если вы используете другую TEE-OS, это, конечно, будет возможно при условии, что они предлагают функциональность.

, а затем создаете CSR (запрос на подпись сертификата)

В зависимости отподдержка, предлагаемая TEE, также возможна.OPTEE-OS поддерживает сертификаты X509 с использованием mbedTLS.

Или ваше клиентское приложение может попросить доверенное приложение получить открытый ключ в формате PEM и вызвать openssl, mbedTLS или любую другую библиотеку для создания CSR.

, а затем отправка файла CSR на сервер Openvpn, и сервер подписывает файл CSR и создает CRT (файл сертификата) и отправляет обратно клиенту.Клиент сохраняет файл CRT в TEE и в следующий раз связывается с сервером OpenVpn, используя закрытый ключ / сертификат.

Ваше клиентское приложение должно будет отправить запрос сертификата и внедрить подписанный сертификат в доверенное приложение, котороезатем придется проверить, совпадают ли закрытый ключ и открытый ключ сертификата.

Это возможный сценарий, однако OpenVpn потребуется способ проверки клиента, и, следовательно, он должен будет вызватьфункция verify / certify, которая будет использовать сохраненный сертификат и закрытый ключ в TEE.

...