У меня есть встроенные устройства, которые расположены в разных городах и подключены к моему серверу OpenVPN. Я инициализирую свои устройства перед их развертыванием и помещаю пару сертификат / ключ через локальную сеть. Когда устройства подключаются к сети на удаленном сайте, они подключаются к моему серверу openVPN через частный туннель. Я использую версию OpenVPN:2.3.10 с EasyRSA на Ubuntu 16.04 LTS

Сейчас сертификаты истекают. Как я могу продлить сертификаты на этих устройствах? Я думаю о 2 подходах.

Подход 1) Сценарий на устройстве, проверяющий действительность сертификата каждый месяц или около того, и когда срок действия сертификата истекает, он должен отправить запрос на генерацию сертификата (стандартный запрос получения https или аналогичный). На стороне сервера должны обрабатываться только запросы, поступающие из частного туннеля. Сертификат / ключ с тем же CN должен быть сгенерирован и передан клиенту.

Проблемы с apporach 1)

  • Как надежно передать пару сертификат / ключ? я не хочу обмениваться личным ключом клиентов через сеть. Весь процесс должен быть автоматизирован, поэтому я также не могу поставить ключ вручную.
  • Как сертификат / ключ генерируется на сервере? я также не хочу, чтобы веб-пользователь apache, т.е. www-data, имел доступ к моей папке easyRSA.

Подход 2) Генерация закрытого ключа на стороне клиента (мое встроенное устройство). Создайте запрос на подпись сертификата (CSR), отправьте его на сервер OpenVPN (который также является моим CA). CA генерирует сертификат и отправляет обратно сертификат клиента.

Проблемы с apporach 2)

  • Как аутентифицировать CSR? Как я могу знать, что CSR исходит от моего встроенного устройства, а не какой-то злоумышленник. Единственный способ, которым я могу заверить, это если CSR идет из частного туннеля.

  • В случае, если срок действия сертификата на моем встроенном устройстве истекает до его обновления, частный туннель не будет существовать. Как я могу аутентифицировать CSR в этом случае? Любой с CA.crt (открытым ключом CA) может сгенерировать закрытый ключ и отправить CSR в CA.

Я думаю, что подход 2 кажется более разумным и безопасным, но я не знаю решения проблем, с которыми я сталкиваюсь. Я хочу знать, правильно ли я понимаю безопасность? или если что-то мне не хватает. Также, если я пойду с подходом 2, как будет выглядеть реализация? я знаю, как сгенерировать ключ и создать CSR, но как лучше всего безопасно отправить его в CA. И на стороне сервера /CA, как получить CSR и как безопасно отправить обратно сертификат.

0