Podpisany certyfikat w Active Directory przy dostępie via LDAP SSL

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)

Źródła: