27. srpna 2015

[ASUSWRT] OpenVPN: Změna serverových certifikátů a klíčů

Při zprovozňování OpenVPN serveru, který je součástí ASUSWRT, jsem narazil na problém, kdy se mi nešlo připojit z OpenVPN klienta (verze 2.38) pro Windows. V logu se nacházel tento záznam:

TLS_ERROR: BIO read tls_read_plaintext error: error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small

Problém souvisí s objevenou chybou Logjam. OpenVPN ve výchozím nastavení routeru generuje Diffie–Hellman klíč o velikosti 512-bit, zatímco aktuální verze OpenVPN vyžaduje klíč o velikosti alespoň 1024-bit.

Byl jsem tedy postaven před dvě možnosti - buď nainstalovat starší verzi OpenVPN klienta, čímž bych se mohl vystavit riziku, nebo se pustit do výměny certifikátů a klíčů. Firmware ASUSWRT tuto možnost dovoluje, proto jsem si vybral druhou možnost.

Postup

Níže uvedený postup vychází z mého laborování a dvoudenního večerního bádání. Postup neřeší žádné další nastavení OpenVPN serveru v ASUSWRT.

1) Generování nových certifikátů

Zde nebudu popisovat to, co již bylo popsáno. Já postupoval podle tohoto návodu, ve kterém je popsáná i instalace easy-rsa pro generování samotných certifikátů. Na internetu je návodů mnoho - tenhle řeší pouze generování samotných certifikátů a přijde mi přehlednější.

2) Změna certifikátů

Změna certifikátů se provádí v sekci VPN, kde je třeba přejít na Pokročilé možnosti a kliknout na volbu Změna obsahu klíčů a certifikace.



Vycházím z návodu výše, proto v následujícím obrázku používám stejné názvy souborů. Po vložení uložte.


Jen upozorním, že v případě souboru server.crt se do pole nevkládá celý obsah souboru, ale jen část uvozená ----- BEGIN xxx ----- / ----- END xxx -----. Já při prvním pokusu zazmatkoval, vložil celý obsah souboru cerver.crt, čím jsem si bricknul celý router (router se neustále dokola restartoval).

3) Úprava konfiguračního souboru Client.ovpn

Nejprve je dobré si vyexportovat konfigurační soubor Client.ovpn pomocí tlačítka Exportovat na obecných možnostech OpenVPN.

Za normálních okolní (tedy před výměnou certifikátů) tento soubor obsahoval PEM certifikátu certifikačního úřadu, PEM klientského certifikátu a klíč ke klientskému certifikátu. Po změně certifikátů obsahuje pouze PEM CA. Ostatní je prázdné. Nicméně kromě certifikátů obsahuje soubor i další konfiguraci, která nám zajistí následné bezproblémové připojení k serveru.

Jak jsem již zmínil, do tohoto souboru musíme vložit PEM certifikátu klienta a PEM klíče k tomuto certifikátu.

Konverze CRT na PEM
openssl x509 -in client1.crt -outform der -out client1.der
openssl x509 -in client1.der -inform der -outform pem -out client1.pem

Konverze KEY na PEM
openssl rsa -in client1.key -outform PEM -out client1_pem.key

Výsledný obsah se vloží do příslušných částí v souboru Client.ovpn:
<cert>
obsah client1.pem
</cert>

<key>
obsah client1_pem.key
</key>

Faktická poznámka: Soubor Client.ovpn nemusí obsahovat přímo PEM certifikátů. Ale pro další použití je tato varianta pohodlnější - např. pro zprovoznění VPN na Androidu.

4) Test spojení

Upravený soubor Client.ovpn stačí nakopírovat do c:\Program Files\OpenVPN\config. V administraci routeru v sekci VPN/OpenVPN je dobré založit nového uživatele, který bude sloužit pro další ověření (tj. kromě certifikátu se klient bude ověřovat i pomocí jména a hesla). No a nakonec už stačí v OpenVPN klientovi kliknout na Connect a zadat přístupové údaje nově založeného uživatele.

PS: V routeru mám verzi firmwaru 3.0.0.4.378_6117 z 9. 6. 2015. Je možné, že někdy v budoucnu tento problém vyřeší přímo Asus - minimálně jsem technickou podporu na celý tento problém upozornil.