OpenSSL позволяем перевыпустить сертификат и подписать его старым приватным ключем, при этом сохраняется структура Modulus сертификата и новый сертификат успешно проверяет старые сертификаты клиентов.
Создаем новый сертификат:
openssl x509 -in ca.crt -days 3650 -out ca-new.crt -signkey ca.key
Получаем ответ:
Getting Private key
и новый сертификат ca-new.crt
Выполним проверку сертификата клиента новым корневым сертификатом:
openssl verify -CAfile ca-new.crt client9.crt
Все хорошо:
client9.crt: OK
Следующей командой можно посмотреть содержимое сертификата и убедиться что у нового и старого сертификата Modulus одинаков:
openssl x509 -noout -text -in ca-new.crt
Все вроде бы очень хорошо, рассылаем новый сертификат, предварительно переименовав его по образу старого с инструкцией пользователю куда его подложить (перезаписываем старый).
Перезапускаем службу на сервере и смотрим как подключатся клиенты. К сожалению не все клиенты это сделали успешно. У некоторых в логе получили:
Tue Mar 21 15:12:18 2017 VERIFY ERROR: depth=1, error=certificate signature failure: /C=RU...
Вот здесь пришлось потерять несколько часов, в итоге выяснилось что на клиентских компьютерах также не срабатывает проверка сертификата клиента:
openssl verify -CAfile ca-new.crt client9.crt
Версия openssl (в составе OpenVPN ) оказалась старая и не хотела успешно проверять.
Соответственно у проблемных клиентов пришлось обновить OpenVPN до версии 2.3.3 (такая использовалась у меня, про другие ничего сказать не могу, но полагаю что более новые версии также будут вести себя положительно) и система отправлена в плавание еще на 10 лет.