TUTORIAL - Import certyfikatu Wildcard - Router IOS

Problemy z zakresu security (VPN, firewall, IDS/IPS itp.)
Wiadomość
Autor
Awatar użytkownika
gryglas
wannabe
wannabe
Posty: 1790
Rejestracja: 09 maja 2006, 07:56
Lokalizacja: Warsaw, PL

TUTORIAL - Import certyfikatu Wildcard - Router IOS

#1

#1 Post autor: gryglas »

Cześć,

Jak co roku, przyszedł czas na wgranie nowego certyfikaty SSL dla Anyconnecta.
Oczywiście jak co roku, znowu siedziałem 2 dni , żeby przypomnieć sobie jak to się robiło bo oczywiście w Cisco nic nie może być proste.
Ale dzięki temu dobrze nam, specjalistom od Cisco płacą :mrgreen: ( proszę nie rozwijać w tym wątku tematu wynagrodzenia w nawiązaniu do mojej wypowiedzi)

Tutorial miałem napisać już rok temu, ale oczywiście mi się nie chciało co przełożyło się na czas poświęcony na wgranie certyfikatu w tym roku.
Mam nadzieję ,że w przyszłym roku zajmie mi to mniej czasu dzięki temu wpisowi, a dodatkowo komuś z was pomoże.

Tutorial dotyczy importu certyfikatu wildcard ( *.twojadomena.pl) do routera (IOS)

Do rzeczy:

I.
Zaczynamy od zapoznania się z dokumentację:
Import Certificates and Private Key with Copy and Paste

II.
Następnie przechodzimy do zainstalowania OpenSSL na swoim komputerze o ile nie został zainstalowany wcześniej.
Korzystam z MS Windows wiec link:
OpenSSL for Windows

III.
Przygotowanie środowiska (certyfikat dla domeny xyz.pl)

1.
W zależności gdzie występujemy o certyfikat, otrzymujemy zazwyczaj 2 pliki:

- 1392033.cert - certyfikat
- 1392033.key - klucz prywatny

W przypadku certyfikatu wildcard nie musimy generować CSR (Certificate Signing Request)

2.
To czego nam jeszcze brakuje do szczęścia to certyfikaty CA (Certificate Authority)

UWAGA! Niektórzy wystawcy tak oprócz certyfikatu CA (np. Global Root CA)
posiadają jeszcze Sub CA ( np. AlphaSSL CA), który również jest nam potrzebny!


3.
Jak to sprawdzić?
Klikamy na certyfikat, który otrzymaliśmy, przechodzimy do zakładki Ścieżka Certyfikatu i patrzymy na drzewko

GlobalSign
|-------AlphaSSL CA
|-----------------------*.xyz.pl

Czyli w tym przypadku nasz certyfikat jest wystawiony i podpisany przez GlobalSign CA oraz AplhaSSL CA

4.
Zazwyczaj certyfikatu CA nie otrzymujemy musimy go wyeksportować:

- klikamy w nasz certyfikat, przechodzimy do zakładki "ścieżka certyfikacji"
- od góry zaznaczamu: GlobalSign
- następnie, klikamy "Wyświetl certyfikat" przechodzimy do zakładki "Szczegóły"
- klikamy w "Kopiuj do pliku"

W kreatorze eksportu certyfikatu wybieramy:
- Certyfikat X.509 szyfrowany algorytmem Base-64 (CER)
Zapisujemy w dowolnym miejscu, najlepiej odpowiednio go nazwać np. GlobalSign CA

5.
Dokładnie to samo wykonujemy dla certyfikatu AlphaSSL CA

!UWAGA - Jeżeli wcześniej miałeś już zainstalowany certyfikat i w kolejnym roku generujesz taki sam w tej samej firmie,
sprawdź czy nie zmieniły się certyfikaty CA i Sub CA.
Inaczej będziesz miał problem z wgraniem certyfikatu !


O co dokładnie chodzi, a chodzi o algorytm.
Ponieważ w moim przypadku, certyfikaty wystawiane są co rok, w poprzednim roku 2014,
Sub CA używało certyfikatu (AlphaSSL CA - G2) o algorytmie SHA1.
Certyfikaty wystawione w tym roku 2015 podpisane są już silniejszym algorytmem SHA256 (AlphaSSL CA - SHA256 - G2)

Jeżeli tego nie sprawdzicie to jak byście się nie starali i głaskali router to nie uda wam się go poprawnie zaimportować.
O ile dobrze pamiętam to błąd jaki występuje podczas importu dotyczy ścieżki autoryzacji czy jakoś tak. W każdym razie nie można potwierdzić ważności certyfikatu.

6.
No dobrze, mamy już wszystko sprawdzone i wyeksportowane wiec w naszym katalogu gdzie zapisaliśmy wszystkie potrzebne certyfikaty mamy:

- GlobalSign CA
- AlphaSSL SHA256 CA
- 1392033.cert
- 1392033.key

IV.
OpenSSL, zmiana formatu na PEM oraz dodanie hasła do klucza prywatnego

Każdy wie, że najcenniejszą rzeczą każdego certyfikatu jest jego klucz prywatny i zawsze musi być zabezpieczony hasłem, aby inne osoby nie mogły go użyć bez naszej wiedzy.
Oczywiście teoria sobie, praktyka sobie :P
Od naszego wystawcy otrzymaliśmy klucz prywatny bez hasła.
Router Cisco nie przyjmie takiego klucza prywatnego wiec musimy go zabezpieczyć.
Dodatkowo wszystkie certyfikaty muszą być w formacie PEM inaczej ich nie wgram.

1.
No to lecimy z OpenSSL

Zmieniamy format klucza z .key na .pem

Kod: Zaznacz cały

openssl rsa -in 1392033.key -text > xyz.pem
!UWAGA: Jeżeli nasz klucz prywatny ma już hasło, upewnij się, że hasło jest szyfrowane przez 3DES
Otwieramy plik klucza dowolnym edytorem tekstu i jego początek ma wyglądać tak:

Kod: Zaznacz cały

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C33CAD1289ACFEFA
Jeżeli nasz klucz prywatny nie posiada hasła, przechodzimy do punktu 2.

2.
Następnie nadajemy hasło dla klucza prywatnego.

Kod: Zaznacz cały

openssl rsa -in xyz.pem -out xyz-des3.pem -des3
W odpowiedzi otrzymamy:

Kod: Zaznacz cały

writing RSA key
Enter PEM pass phrase: trudne_hasło
Verifying - Enter PEM pass phrase: trudne_hasło 
W polu "pass phrase" wpisujemy hasło i poniżej podajemy je ponownie.

Jeżeli wszystko przebiegło poprawnie nasz klucz prywatny posiada już hasło.
Możemy to sprawdzić przez komendę:

Kod: Zaznacz cały

openssl rsa -in xyz-des3.pem -check
i tak naprawdę jedynie problem miałem z kluczem prywatnym, nie musiałem przerabiać pozostałych plików.

W każdym razie pozostałe pliki zaczynają się tak:

GlobalSign CA (Root CA)

Kod: Zaznacz cały

-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
....
-----END CERTIFICATE-----
AlphaSSL SHA256 CA (Sub CA)

Kod: Zaznacz cały

-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
....
-----END CERTIFICATE-----
1392033.cert (nasz certyfikat *xyz.pl)

Kod: Zaznacz cały

-----BEGIN CERTIFICATE-----
MIIFwjCCBKqgAwIBAgISESHowcawkIFxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUA
MEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYD
VQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE1MDYzMDA2NTk0OFoX
....
-----END CERTIFICATE-----
xyz-des3.pem (klucz prywatny)

Kod: Zaznacz cały

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5EF39E25B2274503

muYKPb8DBAMBtFytKvBPQ9AY05uzPthN9CUi7Nwr++Upg1O6+5UU9xALC0BFXQgO
CPDHH2bN63rjuFxvmpbfPWGyBkWFccVW552q+c86gE5iDaLmcbH3EwVhMjnhPja2
TWv+ffb7iLWPP1Imvos4hTrEVHgALo7x5oZrzXC8O+6BVkIUpZrpS1fCNOHmcu8k
....
-----END CERTIFICATE-----
Jeżeli w/w pliki po otwarciu w notatniku wyglądają inaczej, prawdopodobnie mają inny format niż PEM/Base-64 i trzeba je przerobić.

V.
Import certyfikatów

1.
Wracamy do już nam znanej instrukcji: Import Certificates and Private Key with Copy and Paste i lecimy:

2.
Tworzymy trustpoint GlobalSign_CA dla głównego CA

Kod: Zaznacz cały

crypto pki trustpoint GlobalSign_CA 
 enrollment terminal
 fqdn none
 subject-name cn=*.xyz.pl
 revocation-check none
i importujemy pierwszy z certyfikatów (otwórz wszystkie certyfikaty w notatniku, będzie łatwiej)

3.
W pierwszej kolejności Root CA

Kod: Zaznacz cały

crypto ca authenticate GlobalSign_CA

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
....
-----END CERTIFICATE-----
quit

Certificate has the following attributes:
Fingerprint: 615171D8 C3989EFA 4D45B23F 8ACBCDC3 
% Do you accept this certificate? [yes/no]: yes
Trustpoint CA certificate accepted.
% Certificate successfully imported
4.
Po udanym imporcie, tworzymy trustpoint AlphaSSL dla Sub CA ( jeżeli nie mamy Sub CA, pomijamy ten krok)

Kod: Zaznacz cały

crypto pki trustpoint AlphaSSL
 fqdn none
 subject-name cn=*.xyz.pl
 chain-validation continue GlobalSign_CA
 revocation-check none
5.
Importujemy pozostałe certyfikaty w kolejności:

- Sub CA
- klucz prywatny
- certyfikat

Kod: Zaznacz cały

crypto pki import AlphaSSL PEM terminal password trudne_hasło

% Enter PEM-formatted CA certificate.
% End with a blank line or "quit" on a line by itself.

-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
....
-----END CERTIFICATE-----
quit

% Enter PEM-formatted encrypted private key.
% End with "quit" on a line by itself.

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5EF39E25B2274503

muYKPb8DBAMBtFytKvBPQ9AY05uzPthN9CUi7Nwr++Upg1O6+5UU9xALC0BFXQgO
CPDHH2bN63rjuFxvmpbfPWGyBkWFccVW552q+c86gE5iDaLmcbH3EwVhMjnhPja2
TWv+ffb7iLWPP1Imvos4hTrEVHgALo7x5oZrzXC8O+6BVkIUpZrpS1fCNOHmcu8k
....
-----END CERTIFICATE-----
quit

% Enter PEM-formatted certificate.
% End with a blank line or "quit" on a line by itself.

]-----BEGIN CERTIFICATE-----
MIIFwjCCBKqgAwIBAgISESHowcawkIFxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUA
MEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYD
VQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE1MDYzMDA2NTk0OFoX
....
-----END CERTIFICATE-----
quit

!UWAGA: certyfikaty mają wklejać się w równych linijkach, czyli:

Kod: Zaznacz cały

MIIFwjCCBKqgAwIBAgISESHowcawkIFxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUA
MEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYD
VQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE1MDYzMDA2NTk0OFoX
MIIFwjCCBKqgAwIBAgISESHowcawkIFxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUA
MEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYD
VQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE1MDYzMDA2NTk0OFoX
Jeżeli wklejają się wzdłuż to jest to błąd i certyfikat się nie zaimportuje:

Kod: Zaznacz cały

MIIFwjCCBKqgAwIBAgISESHowcawkIFxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUAMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWx
TaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE1MDYzMDA2NTk0OFoXMIIFwjCCBKqgAwIBAgISESHowcawkI
FxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUA

Oczywiście ten problem mnie spotkał, korzystałem z standardowego notatnika oraz z Notepad C++.
W obu przypadkach był ten sam błąd i problem z importem.

Po wielu próbach przyszedł mi z pomocą ......... MS Word :mrgreen:
Po otwarciu certyfikatu w Wordzie i przyklejeniu do CLI, wszystko wgrało się poprawnie.
Najśmieszniejsze jest to ,że problem był tylko z przyklejeniem klucza prywatnego, inne certyfikaty bez problemu przekopiowały się z notatnika.
Dlaczego tak było...? Nie wiem nie chciało mi się wnikać.

Wróćmy do naszego routera,
Jeżeli wszystko zrobiliśmy poprawnie otrzymamy upragniony komunikat:

Kod: Zaznacz cały

% PEM files import succeeded.
Nasz certyfikat wildcard jej poprawnie wgrany, możemy dodać go do konfiguracji Anyconnecta :P

Kod: Zaznacz cały

webvpn gateway ssl-vpn
 ip address 212.144.244.22 port 443  
 ssl encryption rc4-md5
 ssl trustpoint AlphaSSL
 inservice
VI.
A jak nie, czyli troubleshooting...

Przeważnie, problemem jest format certyfikatów (PEM) i poprawne wgranie klucza prywatnego.

Co dalej:
1. upewnij się ,że klucz prywatny ma poprawne hasło
2. upewnij się ,że jest zaszyfrowany przez 3DES
3. upewnij się , że jest w formacie PEM
4. sprawdź czy certyfikaty są poprawnie wklejane do konfiguracji routera
5. komendy do troubleshooting:

Kod: Zaznacz cały

debug crypto pki messages
debug crypto pki server
debug crypto pk transactions
debug crypto pki validation

To na tyle, mam nadzieję ,że niczego nie pominąłem i w przyszłym roku wgranie certyfikatu zajmie mi 10 min, a innym ułatwi ten proces konfiguracji routera.
https://vpnonline.pl - Twój prywatny VPN - 61 serwery VPN w 29 lokalizacjach na świecie, 470 adresów IP.

bica100
newbie
newbie
Posty: 1
Rejestracja: 25 sie 2015, 08:06

#2

#2 Post autor: bica100 »

No i baja :P
SER!!!

Awatar użytkownika
DFly
member
member
Posty: 16
Rejestracja: 30 lip 2010, 09:08

Re: TUTORIAL - Import certyfikatu Wildcard - Router IOS

#3

#3 Post autor: DFly »

Taki mały update ode mnie.
Gdyby ktoś miał problem z importem certyfikatów z terminala formacie PEM oraz klucza prywatnego i dostawał komunikat unable decode key.
Mi pomogło wgranie plików certyfikatów PEM jak i szyfrowanego klucza prywatnego na serwer TFTP.
Następnie w konfiguracji Trustpoint ustawiłem enrollment url tftp
Przy imporcie certyfikatu CA, certyfikatu wildcard oraz klucza prywatnego importowałem odpowiednie pliki z serwera TFTP.
U mnie ta metoda nie generowała powyższego błędu i certyfikaty ładnie się zaimportowały do trustpointa.
Nie wiem czy komuś się to przyda, ale ja za rok pewnie będę musiał sobie odświeżyć pamięć tym wątkiem.
It's nice to be important, but more important is to be nice.

ka3
newbie
newbie
Posty: 1
Rejestracja: 01 gru 2011, 15:16

Re: TUTORIAL - Import certyfikatu Wildcard - Router IOS

#4

#4 Post autor: ka3 »

Wiem, że temat trochę stary, ale może ktoś mi pomoże.
Mam taki problem, że instrukcja przedstawiona powyżej działa do restartu routera. Po restarcie niestety dostaję komunikat:

Kod: Zaznacz cały

"Could not connect to server. Please verify Internet connectivity and server address"
Będę wdzięczny za pomoc.

Pozdrawiam.

ODPOWIEDZ