Opis procedury generowania żądania podpisu dla klucza usługi LDAP via SSL. Notatka jest ilustracją do artykułu z Microsoft Knowledge Base http://support.microsoft.com/kb/321051
Generowanie Certificate Signing Request
W pierwszym kroku generuję CSR. Ważne: nie generuję klucza. On już jest w systemie. Generuję jedynie żądanie podpisu. W artykule jest zalecany program certreq i tego właśnie użyję. W przeciwieństwie do narzędzi dostępnych w Linuxie (openssl) tutaj parametrów do podpisu nie podaje się w linii poleceń, lecz w formie pliku. Należy najpierw przygotować plik request.inf i w nim zapisać wszystkie parametry dot. CSRa. Poniżej przykładowy plik:
;----------------- request.inf ----------------- [Version] Signature="$Windows NT$ [NewRequest] Subject = "CN=<DC fqdn>" ; zamień na FQDN kontrolera DC KeySpec = 1 KeyLength = 2048 ; Dopuszczalne wartości 1024, 2048, 4096, 8192 lub 16384. ; Dłuższe klucze są bezpieczniejsze i mają ; większy wpływ na wydajność. Exportable = TRUE MachineKeySet = TRUE SMIME = False PrivateKeyArchive = FALSE UserProtected = FALSE UseExistingKeySet = FALSE ProviderName = "Microsoft RSA SChannel Cryptographic Provider" ProviderType = 12 RequestType = PKCS10 KeyUsage = 0xa0 [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1 ; to dotyczy uwierzytelnienia serwera ;-----------------------------------------------
Najważniejsze w powyższym pliku jest pole Subject, gdyż zawiera ono wszystkie istotne informacje dot. generowanego CSRa.Przykładowe pole Subject powinno wyglądać następująco:
Subject = "C=PL;ST=Wojewodztwo;L=Miasto;O=Organizacja;OU=Jednostka Organizacyjna;CN=glowna.domena
"
Najważniejsze w powyższym przykładzie są znaki rozdzielające poszczególne pola informacyjne. Znakiem rozdzielającym pola w temacie musi być średnik! W przeciwieństwie do systemów Linux, gdzie w narzędziu openssl stosuje się znak „/” (slash).
Ważne: niektórzy dostawcy certyfikatów nie przyjmują domen wpisanych w rozszerzeniu X509 Subject Alternative Name. Należy więc unikać stosowania tego rozszerzenia.
Więcej na temat CSRów można znaleźć w Wikipedii: http://en.wikipedia.org/wiki/Certificate_signing_request.
Mając gotowy plik request.inf z parametrami wykonuję polecenie:
W efekcie powyższego polecenia otrzymuję plik request.req, który zawiera zakodowane żądanie certyfikatu. Plik ten można spokojnie otworzyć w notatniku i zweryfikować jego zawartość korzystając z dostępnych online dekoderów CSR, np.: http://lmgtfy.com/?q=CSR+decode.
Instalacja otrzymanego certyfikatu
Otrzymany certyfikat zapisałem na pulpicie w pliku new-cert.pem, a następnie wykonałem polecenie instalujące certyfikat w systemie.
Następnie warto sprawdzić, czy certyfikat został poprawnie zainstalowany.
Weryfikacja poprawności certyfikatu
Aby sprawdzić poprawność zainstalowanego certyfikatu można skorzystać z poniższego polecenia dostępnego w systemach Linux:
openssl s_client -showcerts -connect host.adres.com:636 -CApath /etc/ssl/certs
Oczywiście host.adres.com:636 należy zamienić na adres testowanej usługi SSL, a ścieżka /etc/ssl/certs jest zgodna z Ubuntu, lecz w innych systemach może wyglądać inaczej.
To, co istotne, to ostatnia linijka otrzymanego wyniku, która powinna wyglądać mniej więcej tak:
(...) Start Time: 1339623771 Timeout : 300 (sec) Verify return code: 0 (ok)