Полагаю, среди всех нагугленных мануалов вы не обошли вниманием и официальный, а именно раздел про генерацию сертификатов:
https://openvpn.net/index.php/open-source/document... В конце этого раздела есть ответ на ваш первый вопрос.
The final step in the key generation process is to copy all files to the machines which need them, taking care to copy secret files over a secure channel.
Now wait, you may say. Shouldn't it be possible to set up the PKI without a pre-existing secure channel?
The answer is ostensibly yes. In the example above, for the sake of brevity, we generated all private keys in the same place. With a bit more effort, we could have done this differently. For example, instead of generating the client certificate and keys on the server, we could have had the client generate its own private key locally, and then submit a Certificate Signing Request (CSR) to the key-signing machine. In turn, the key-signing machine could have processed the CSR and returned a signed certificate to the client. This could have been done without ever requiring that a secret .key file leave the hard drive of the machine on which it was generated.
Как верно заметил
res2001, для исключения перехвата по незащищенному каналу нужно передавать не приватный ключ, а запрос на сертификат. В скриптах
build-key и
build-key-server, входящих в поставку OpenVPN и используемых в примерах, шаги по генерации пары ключей, генерации запроса к CA и подписи сертификата объединены, но их можно разделить. Загляните внутрь скриптов и поймете.
Что касается второго вопроса. Если в руки злоумышленника попадет клиентский сертификат с приватным ключом, то он сможет подключиться к серверу от имени клиента. Ключ для шифрования трафика генерируется свой для каждой сессии. Вашу сессию злоумышленник сможет прослушать, если перехватит ваш трафик в момент подключения и применит MitM атаку.
Это все отностися к работе в режиме PKI. Есть еще режим работы со статическим ключом (описан здесь:
https://openvpn.net/index.php/open-source/document..., там ключ один единственный и общий, передавай как хочешь. А если ключ утек - считай все пропало, можно расшифровывать любые сессии, в том числе записанные ранее.