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ą ( 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
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
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
2.
Następnie nadajemy hasło dla klucza prywatnego.
Kod: Zaznacz cały
openssl rsa -in xyz.pem -out xyz-des3.pem -des3
Kod: Zaznacz cały
writing RSA key
Enter PEM pass phrase: trudne_hasło
Verifying - Enter PEM pass phrase: trudne_hasło
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
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-----
Kod: Zaznacz cały
-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
....
-----END CERTIFICATE-----
Kod: Zaznacz cały
-----BEGIN CERTIFICATE-----
MIIFwjCCBKqgAwIBAgISESHowcawkIFxdDVNpxjO4sEFMA0GCSqGSIb3DQEBCwUA
MEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYD
VQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE1MDYzMDA2NTk0OFoX
....
-----END CERTIFICATE-----
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-----
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
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
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
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
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
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.
Kod: Zaznacz cały
webvpn gateway ssl-vpn
ip address 212.144.244.22 port 443
ssl encryption rc4-md5
ssl trustpoint AlphaSSL
inservice
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.