Czasem zdarza mi się korzystać z OpenVPN aby połączyć mojego laptopa do sieci w której stoi QNAP. Połączenie mam skonfigurowane i wszystko działa, ale chciałbym zrozumieć zasadę działania, a tak na prawdę to co "siedzi" w pliku konfiguracyjnym po stronie klienta.
Na te potrzeby zrobiłem kilka testów które tu opiszę. Mam nadzieję, że jest to czytelne i zrozumiecie o co mi chodzi Testy miały na celu właśnie sprawdzenie co dają poszczególne certyfikaty i klucze. Udało mi się ustalić co jest potrzebne aby wszystko działało - teraz pozostaje tylko pytanie co jest co i dlaczego akurat tak to trzeba skonfigurować.
Dane wejściowe
1. Serwer OpenVPN uruchomiony na QNAPie który jest w sieci ze stałym publicznym adresem IP
2. Na routerze przekierowany port UDP 1194 (testowo, docelowo oczywiście zmienię na inny) do QNAPa
3. Uruchomiona usługa myqnapcloud i dla adresu aaa.myqnapcloud.com wygenerowany certyfikat SSL Let's Encrypt
4. Z QNAPa pobieram plik konfiguracyjny (aaa.ovpn) który na końcu ma wpisane:
<ca>
-----BEGIN CERTIFICATE-----
tu jest ciąg znaków, czyli certyfikat
-----END CERTIFICATE-----
</ca>
5. Z panel sterowania->bezpieczeństwo->certyfikat i klucz prywatny pobieram certyfikat (<cert>), klucz prywatny (<key>) i certyfikat pośredniczący (nie znalazłem dla niego zastosowania). To wszystko dotyczy SSLa więc jest to inny certyfikat niż w pliku konfiguracyjnym
6. Klient OpenVPN zainstalowany na komputerze z Windows 7
Testy (wszystkie opisane czynności wykonuję po stronie klienta OpenVPN, na komputerze z Windows 7)
7. Konfiguruję połączenie na podstawie pobranego pliku aaa.ovpn (nic w nim nie zmieniam) i dostaję błąd Profiles that require external certificate for connection are not supported on Windws 7 in this app version. Połączenie oczywiście nie jest nawiazane.
8. Do powyższego pliku dopisuję setenv CLIENT_CERT 0 (znalazłem gdzieś takie info w necie) i wtedy połączenie jest nawiązywane. Oczywiście muszę dodatkowo podać login i hasło (dla użytkownika z QNAPa).
9. W powyższym pliku usuwam całą zawartość między nawiasami <ca> i </ca> - plik się zaczytuje (ponieważ zostawiłem dopisane etenv CLIENT_CERT 0 to nie ma błędu) ale się nie łączy - już wiem, że zawartość <ca>...</ca> jest ważna!
10. Wracam z poprzednimi zmianami i do oryginalnego pliku aaa.ovpn (czyli bez dopisania setenv CLIENT_CERT 0) dodaję zawartość pliku <cert>, a więc mam tu <ca>...</ca> i potem <cert>...</cert> - pojawia się taki sam błąd jak opisany w punkcie 7.
11. Ponownie wracam ze zmianami do oryginalnego pliku aaa.ovpn dodaję zawartość pliku <key>, a więc mam tu <ca>...</ca> i potem <key>...</key> - pojawia się taki sam błąd jak opisany w punkcie 7.
12. Wracam z poprzednimi zmianami i do oryginalnego pliku dopisuję <cert></cert> i <key></key> ale bez zawartości (więc jedynie daję te nawiasy) - plik taki jest zaczytywany, nie pojawia się błąd, ale się nie łączy
13. Do powyższego punkty dodaj zawartość <cert> a zawartość <key> jest pusta, a więc mam <ca>...</ca> następnie <cert>...</cert> oraz <key></key> - plik również się zaczytuje, ale się nie łączy.
14. Do pliku z punktu 12 dodaję teraz tylko zawartość <key> a więc mam <ca>...</ca> następnie <cert></cert> oraz <key>...</key> - plik również się zaczytuje, ale się nie łączy.
15. Wreszcie na koniec wklejam zawartość wszystkich trzech plików, czyli mam <ca>...</ca> następnie <cert>...</cert> oraz <key>...</key> - tym razem połączenie się udaje, ale muszą podać login i hasło.
Pytania
16. Co to jest za certyfikat <ca> z pliku konfiguracyjnego, a co to jest certyfikat <cert> z "SSL"?
17. Co to jest za klucz <key> z "SSL"?
18. W pliku konfiguracyjnym w jednym z pierwszych wierszy mam wpisane remote mój_publiczny_adres_IP 1194 Testowo zrobiłem to też na innym QNAPie z publicznym ale dynamicznym IP i tam też jest wpisany adres który obecnie mam, ale za dzień czy tydzień przecież się zmieni. Wtedy więc nie uda mi się nawiązać połączenia. Czy tu zamiast adresu IP można wstawić adres bbb.myqnapcloud.com (który dzięki DDNS dostanie się do mojego aktualnego adresu IP)? Jeśli nie to oznacza, że OpenVPN działa tylko z publicznym ale i stałym adresem IP?
19. Co to jest certyfikat pośredniczący (pobrany w punkcie 5)? Czy jest do czegoś potrzebny?
20. Co dokładnie oznacza setenv CLIENT_CERT 0 i czym grozi taka konfiguracja?
21. Jak widać, aby nawiązać połączenie, w pliku konfiguracyjnym musi być wpisana zawartość trzech rzeczy czyli <ca>, <cert> oraz <key>. Pomimo to i tak trzeba przy logowaniu podawać login i hasło. Czy da się skonfigurować tak, aby to w pliku konfiguracyjnym zawrzeć te dane (tzn. login i hasło)?
Wiem, że te pytania nie są powiązane typowo z QNAPem a bardziej z zasadą działania VPN lub konkretnego rozwiązania jakim jest OpenVPN, ale liczę na to, że znajdą się i tu ludzie z taką wiedzą.
Z góry bardzo dziękuję za pomoc.
Na te potrzeby zrobiłem kilka testów które tu opiszę. Mam nadzieję, że jest to czytelne i zrozumiecie o co mi chodzi Testy miały na celu właśnie sprawdzenie co dają poszczególne certyfikaty i klucze. Udało mi się ustalić co jest potrzebne aby wszystko działało - teraz pozostaje tylko pytanie co jest co i dlaczego akurat tak to trzeba skonfigurować.
Dane wejściowe
1. Serwer OpenVPN uruchomiony na QNAPie który jest w sieci ze stałym publicznym adresem IP
2. Na routerze przekierowany port UDP 1194 (testowo, docelowo oczywiście zmienię na inny) do QNAPa
3. Uruchomiona usługa myqnapcloud i dla adresu aaa.myqnapcloud.com wygenerowany certyfikat SSL Let's Encrypt
4. Z QNAPa pobieram plik konfiguracyjny (aaa.ovpn) który na końcu ma wpisane:
<ca>
-----BEGIN CERTIFICATE-----
tu jest ciąg znaków, czyli certyfikat
-----END CERTIFICATE-----
</ca>
5. Z panel sterowania->bezpieczeństwo->certyfikat i klucz prywatny pobieram certyfikat (<cert>), klucz prywatny (<key>) i certyfikat pośredniczący (nie znalazłem dla niego zastosowania). To wszystko dotyczy SSLa więc jest to inny certyfikat niż w pliku konfiguracyjnym
6. Klient OpenVPN zainstalowany na komputerze z Windows 7
Testy (wszystkie opisane czynności wykonuję po stronie klienta OpenVPN, na komputerze z Windows 7)
7. Konfiguruję połączenie na podstawie pobranego pliku aaa.ovpn (nic w nim nie zmieniam) i dostaję błąd Profiles that require external certificate for connection are not supported on Windws 7 in this app version. Połączenie oczywiście nie jest nawiazane.
8. Do powyższego pliku dopisuję setenv CLIENT_CERT 0 (znalazłem gdzieś takie info w necie) i wtedy połączenie jest nawiązywane. Oczywiście muszę dodatkowo podać login i hasło (dla użytkownika z QNAPa).
9. W powyższym pliku usuwam całą zawartość między nawiasami <ca> i </ca> - plik się zaczytuje (ponieważ zostawiłem dopisane etenv CLIENT_CERT 0 to nie ma błędu) ale się nie łączy - już wiem, że zawartość <ca>...</ca> jest ważna!
10. Wracam z poprzednimi zmianami i do oryginalnego pliku aaa.ovpn (czyli bez dopisania setenv CLIENT_CERT 0) dodaję zawartość pliku <cert>, a więc mam tu <ca>...</ca> i potem <cert>...</cert> - pojawia się taki sam błąd jak opisany w punkcie 7.
11. Ponownie wracam ze zmianami do oryginalnego pliku aaa.ovpn dodaję zawartość pliku <key>, a więc mam tu <ca>...</ca> i potem <key>...</key> - pojawia się taki sam błąd jak opisany w punkcie 7.
12. Wracam z poprzednimi zmianami i do oryginalnego pliku dopisuję <cert></cert> i <key></key> ale bez zawartości (więc jedynie daję te nawiasy) - plik taki jest zaczytywany, nie pojawia się błąd, ale się nie łączy
13. Do powyższego punkty dodaj zawartość <cert> a zawartość <key> jest pusta, a więc mam <ca>...</ca> następnie <cert>...</cert> oraz <key></key> - plik również się zaczytuje, ale się nie łączy.
14. Do pliku z punktu 12 dodaję teraz tylko zawartość <key> a więc mam <ca>...</ca> następnie <cert></cert> oraz <key>...</key> - plik również się zaczytuje, ale się nie łączy.
15. Wreszcie na koniec wklejam zawartość wszystkich trzech plików, czyli mam <ca>...</ca> następnie <cert>...</cert> oraz <key>...</key> - tym razem połączenie się udaje, ale muszą podać login i hasło.
Pytania
16. Co to jest za certyfikat <ca> z pliku konfiguracyjnego, a co to jest certyfikat <cert> z "SSL"?
17. Co to jest za klucz <key> z "SSL"?
18. W pliku konfiguracyjnym w jednym z pierwszych wierszy mam wpisane remote mój_publiczny_adres_IP 1194 Testowo zrobiłem to też na innym QNAPie z publicznym ale dynamicznym IP i tam też jest wpisany adres który obecnie mam, ale za dzień czy tydzień przecież się zmieni. Wtedy więc nie uda mi się nawiązać połączenia. Czy tu zamiast adresu IP można wstawić adres bbb.myqnapcloud.com (który dzięki DDNS dostanie się do mojego aktualnego adresu IP)? Jeśli nie to oznacza, że OpenVPN działa tylko z publicznym ale i stałym adresem IP?
19. Co to jest certyfikat pośredniczący (pobrany w punkcie 5)? Czy jest do czegoś potrzebny?
20. Co dokładnie oznacza setenv CLIENT_CERT 0 i czym grozi taka konfiguracja?
21. Jak widać, aby nawiązać połączenie, w pliku konfiguracyjnym musi być wpisana zawartość trzech rzeczy czyli <ca>, <cert> oraz <key>. Pomimo to i tak trzeba przy logowaniu podawać login i hasło. Czy da się skonfigurować tak, aby to w pliku konfiguracyjnym zawrzeć te dane (tzn. login i hasło)?
Wiem, że te pytania nie są powiązane typowo z QNAPem a bardziej z zasadą działania VPN lub konkretnego rozwiązania jakim jest OpenVPN, ale liczę na to, że znajdą się i tu ludzie z taką wiedzą.
Z góry bardzo dziękuję za pomoc.