Usługi certyfikacyjne Microsoftu działają w oparciu o szablony certyfikatu, w których zawarte są informacje dotyczące przeznaczenia certyfikatu wydanego na jego podstawie, atrybutów zabezpieczeń związanych z możliwością wydawania i użytkowania certyfikatu i tym podobnych rzeczy powiązanych z użytkowaniem Centrum Certyfikacji w strukturach Active Directory.
Bardzo często w takim środowisku musi się pojawić system działający pod kontrolą linuxa. Ot, choćby VMware ESX, które są hostowane przez Red Hat’a. W takich systemach wszelkie operacje związane z certyfikatami wykonywane jest przez pakiet openssl. Potrafi on niezmiernie dużo zrobić z automatu, jednakże jego funkcjonalność ogranicza się do działań kryptograficznych, jako że nie jest to narzędzie przeznaczone do integracji z Active Directory. Na szczęście jednak Microsoft swoje rozwiązanie automatyzujące wydawanie certyfikatów zmieścił w ramach standardu, i przy niewielkich modyfikacjach pliku konfiguracyjnego można także w Żądaniu Certyfikatu (Certificate Request) generowanym przy pomocy tego narzędzia umieścić także pole odpowiedzialne za szablon przy pomocy którego CA utworzy certyfikat.
Aby takie rozszerzenie dodać, trzeba przede wszystkim poinformować openssl’a o tym, że taki mechanizm istnieje. Robi się to przez rejestrację w pliku konfiguracyjnym openssl’a oid’u wykorzystywanego przez Microsoft do oznaczenia szablonu certyfikatu. W tym celu należy umieścić w sekcji
1 | [ new_oids ] |
linię
1 | CertificateTemplate = 1.3.6.1.4.1.311.20.2 |
oraz zarejestrować tę sekcję jako definiującą niestandardowe oidy za pomocą linii
1 | oid_section = new_oids |
umieszczonej na początku pliku, gdzie definiuje się zmnienne i sekcje. (obszar ten jest zbiorem wpisów podobnych do przytoczonego) Następnie koniecznym jest zdefiniowanie zestawu szablonów możliwych do wykorzystania przez openssl’a przy tworzeniu żądań certyfikatów. Wykonuje się to przez przypisanie zarejestrowanemu wcześniej oid’owi odpowiedniej nazwy szablonu. Jest to realizowane przy pomocy definicji sekcji nazwanej zgodnie z nazwą szablonu o następującej strukturze:
1 2 | [ Template Name ] CertificateTemplate = ASN1:PRINTABLESTRING:Template Name |
Przytoczona sekcja definiuje szablon o nazwie “Template Name”. Liczba sekcji nie jest ograniczona, należy je dla zachowania przejrzystości pliku konfiguracyjnego umieszczać bezpośrednio po sekcji
1 | [ req ] |
która odpowiedzialna jest za opcje związane z żądaniami certyfikatu.
Ostatnim krokiem jest sama generacja klucza prywatnego oraz żądania certyfikatu poświadczającego klucz publiczny z nim skojarzony. Wykonuje się to poprzez wydanie komendy:
1 | openssl genrsa -out RSAkey.pem -des3 1048 |
celem utworzenia klucza, oraz następnie
1 | openssl req -outform DER -out RSAreq.req -new -key RSAkey.pem -reqexts "Template Name" |
Jak widać, poza typowymi argumentami podawanymi do komendy req występuje parametr
1 | -reqexts |
który odpowiada za wybór odpowiedniego szablonu certyfikatu który zostanie wykorzystany przez CA do utworzenia Certyfikatu.
Następnie pozostaje wysłać Request do Urzędu Certyfikacji i przetworzyć odpowiedź. Niestety na razie nie znam metody na wykonanie tego prosto spod Linuxa, więc należy się uciec do narzędzi windows’owych (np. certreq.exe), ale prace trwają.
O efektach będę informował 🙂