Надо посмотреть. Возможно в новой версии OpenVPN добавили, но в старой не видел, да и документацию читал по опциям, не было ничего подобного. Посмотрю, может проблема то решена уже. Отпишусь в этом же сообщении обновлением.
UPD: Да, новый openvpn
поддерживает передачу параметров движкам SSL. Разобрался сейчас в связке кода всех 3-х проектов: cryptoauth-openssl-engine, openssl, openvpn. Вообщем, openvpn
нужно либо ключом key
передавать имя файла с содержимым MAC чипа вида: ATECCx08:00:02:C0:00
, либо использовать inline параметр key
в конфигурационном файле профиля клиента openvpn
:
<key>
ATECCx08:00:02:C0:00
</key>
Сначала openvpn
пытается интерпретировать данные, как приватный ключ в PEM-формате, и только после неудачи предпринимает попытку передачи в криптографический движок, указанный в параметре engine
, делая соответствующие записи в журнал или стандарный вывод ошибок. Это поведение не описано в официальной документации и вполне в будущем может изменится (а возможно и обретет статус официального).
Но не все так просто. Возникает ошибка при работе движка cryptoauth-openssl-engine с кодом 0xF4
(что определено в коде как ATCA_EXECUTION_ERROR), по всей видимости чип возвращает ошибку выполнения команды.
Причина может быть в некотором различии использования в openssl
и openvpn
. Первая, которая успешно работает с чипом, инициализирует движок вызовом ENGINE_by_id
, затем вызывает требуемый функционал и сразу освобождает ресурсы с помощью ENGINE_free
. openvpn
так же инициализирует, но не освобождает ресурсы до выхода из процесса, вызывая требуемые функции уже между ENGINE_init
и ENGINE_finish
. Последние определены и используются в библиотеке движка крипточипа, но вот вопрос: корректна ли их реализация?.. @EvgenyBoger
Часть конфига:
ca /etc/openvpn/tm/ca.crt
cert /etc/openvpn/tm/device.crt
engine ateccx08
<key>
ATECCx08:00:02:C0:00
</key>
Вывод:
# openvpn --config tm.conf
2022-11-24 08:35:09 OpenVPN 2.5.1 arm-unknown-linux-gnueabihf [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2021
2022-11-24 08:35:09 library versions: OpenSSL 1.1.1n 15 Mar 2022, LZO 2.10
2022-11-24 08:35:09 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
2022-11-24 08:35:09 Initializing OpenSSL support for engine 'ateccx08'
2022-11-24 08:35:09 OpenSSL: error:0909006C:PEM routines:get_name:no start line
2022-11-24 08:35:09 PEM_read_bio failed, now trying engine method to load private key
Command atcab_checkmac is failed with status 0xf4
2022-11-24 08:35:10 OpenSSL: error:26096080:engine routines:ENGINE_load_private_key:failed loading private key
2022-11-24 08:35:10 Engine could not load key file
2022-11-24 08:35:10 Exiting due to fatal error