Podczas wyszukiwania znalazłem kilka sposobów podpisywania żądania podpisania certyfikatu SSL:
Za pomocą
x509
modułu:openssl x509 -req -days 360 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
Za pomocą
ca
modułu:openssl ca -cert ca.crt -keyfile ca.key -in server.csr -out server.crt
Uwaga: Nie jestem pewien, czy użyję odpowiednich parametrów do tego. Jeśli mam z niego skorzystać, proszę doradzić prawidłowe użytkowanie.
W jaki sposób należy podpisywać wnioski o certyfikaty w urzędzie certyfikacji? Czy jedna metoda jest lepsza od drugiej (na przykład jedna jest przestarzała)?
ca
dotyczy przypadków, w których poważnie myślisz o zostaniu urzędem certyfikacji.Odpowiedzi:
Brakuje ci wstępu do tych poleceń.
Jest to proces dwuetapowy. Najpierw konfigurujesz urząd certyfikacji, a następnie podpisujesz certyfikat jednostki końcowej (inaczej serwer lub użytkownik). Oba polecenia łączą dwa kroki w jeden. Oba zakładają, że plik konfiguracyjny OpenSSL jest już skonfigurowany zarówno dla urzędów certyfikacji, jak i dla certyfikatów serwera (encji końcowej).
Najpierw utwórz podstawowy plik konfiguracyjny :
Następnie dodaj do niego następujące elementy:
Powyższe pola pochodzą z bardziej złożonych
openssl.cnf
(można je znaleźć/usr/lib/openssl.cnf
), ale myślę, że są one niezbędne do utworzenia certyfikatu CA i klucza prywatnego.Dostosuj pola powyżej, aby dostosować je do swojego gustu. Domyślne oszczędzają czas od wprowadzenia tych samych informacji podczas eksperymentowania z plikiem konfiguracyjnym i opcjami poleceń.
Pominąłem rzeczy związane z CRL, ale operacje w Twoim urzędzie certyfikacji powinny je mieć. Zobacz
openssl.cnf
i powiązanecrl_ext
rozdział.Następnie wykonaj następujące czynności.
-nodes
Pomija hasło lub hasła, dzięki czemu można zbadać certyfikat. To naprawdę zły pomysł, aby pominąć hasło lub hasło.Po wykonaniu polecenia
cacert.pem
będzie certyfikatem dla operacji urzędu certyfikacji icakey.pem
będzie kluczem prywatnym. Przypomnijmy, że klucz prywatny nie ma hasła ani hasła.Możesz zrzucić certyfikat w następujący sposób.
I przetestuj jego cel w następujący sposób (nie martw się o
Any Purpose: Yes
; patrz „Krytyczny, CA: FAŁSZ”, ale „Dowolny CA: Tak” ).W części drugiej zamierzam utworzyć inny plik konfiguracyjny, który będzie łatwo przyswajalny. Po pierwsze, (można zrobić jedną z tych certyfikatów również użytkownika).
touch
openssl-server.cnf
Następnie otwórz i dodaj następujące.
Jeśli się rozwijasz i musisz używać stacji roboczej jako serwera, może być konieczne wykonanie następujących czynności w przeglądarce Chrome. W przeciwnym razie Chrome może złożyć skargę, że nazwa pospolita jest nieprawidłowa (
ERR_CERT_COMMON_NAME_INVALID
) . W tym przypadku nie jestem pewien, jaki jest związek między adresem IP w sieci SAN a CN.Następnie utwórz żądanie certyfikatu serwera. Pamiętaj, aby pominąć
-x509
*. Dodanie-x509
spowoduje utworzenie certyfikatu, a nie żądania.Po wykonaniu tego polecenia będziesz mieć żądanie w
servercert.csr
i klucz prywatny wserverkey.pem
.I możesz to sprawdzić ponownie.
Następnie musisz podpisać go za pomocą urzędu certyfikacji.
Jesteś prawie gotowy do podpisania certyfikatu serwera przez urząd certyfikacji. Urząd certyfikacji
openssl-ca.cnf
potrzebuje jeszcze dwóch sekcji przed wydaniem polecenia.Najpierw otwórz
openssl-ca.cnf
i dodaj następujące dwie sekcje.Po drugie, dodaj następujący
[ CA_default ]
fragment do sekcjiopenssl-ca.cnf
. Pominąłem je wcześniej, ponieważ mogą komplikować rzeczy (wtedy nie były używane). Teraz zobaczysz, jak są używane, więc mam nadzieję, że będą miały sens.Po trzecie, dotknij
index.txt
iserial.txt
:Następnie wykonaj następujące czynności:
Powinieneś zobaczyć podobny do następującego:
Po wykonaniu polecenia będziesz mieć świeżo wybity certyfikat serwera
servercert.pem
. Klucz prywatny został utworzony wcześniej i jest dostępny wserverkey.pem
.Na koniec możesz sprawdzić swój świeżo wybity certyfikat, wykonując następujące czynności:
Wcześniej, dodano następujące do
CA_default
:copy_extensions = copy
. To rozszerzenie kopii dostarczone przez osobę składającą wniosek.W przypadku pominięcia w
copy_extensions = copy
certyfikacie serwera nie będzie dostępnych alternatywnych nazw podmiotów (SAN), takich jakwww.example.com
imail.example.com
.Jeśli używasz
copy_extensions = copy
, ale nie przeglądasz żądania, osoba żądająca może oszukać Cię do podpisania czegoś w rodzaju podrzędnego katalogu głównego (zamiast certyfikatu serwera lub użytkownika). Co oznacza, że będzie on w stanie wybijać certyfikaty łączące je z Twoim zaufanym rootem. Pamiętaj, aby zweryfikować wniosekopenssl req -verify
przed podpisaniem.Jeśli go opuścisz
unique_subject
lub go ustawiszyes
, będziesz mógł utworzyć tylko jeden certyfikat pod nazwą wyróżniającą podmiotu.Próba utworzenia drugiego certyfikatu podczas eksperymentów spowoduje, że podczas podpisywania certyfikatu serwera kluczem prywatnym urzędu certyfikacji:
unique_subject = no
Jest więc idealny do testowania.Jeśli chcesz, aby upewnić się, że organizacyjna Nazwa jest zgodna między podpisem własnym CAS, podrzędny urząd certyfikacji i End-Entity certyfikatów, a następnie dodać następujące pliki konfiguracyjne CA:
Jeśli chcesz zezwolić na zmianę nazwy organizacji , użyj:
Istnieją inne zasady dotyczące obsługi nazw DNS w certyfikatach X.509 / PKIX. Zasady znajdują się w tych dokumentach:
RFC 6797 i RFC 7469 są wymienione, ponieważ są bardziej restrykcyjne niż inne dokumenty RFC i CA / B. RFC 6797 i 7469 również nie pozwalają na adres IP.
źródło
openssl req
służy do generowania CSR,openssl req -x509
służy do generowania certyfikatu CA (widziałem w innym miejscu, w którym można również utworzyć certyfikat z podpisem własnym),openssl ca
służy do podpisywania CSR za pomocą certyfikatu CA. Dobrze? Mylę też to, że te same części pliku openssl.cnf są używane z różnymi wartościami w zależności od polecenia ... Myślę, że jestem teraz całkowicie zagubiony.openssl req -x509
służy do tworzenia urzędu certyfikacji. Po drugie,openssl req
służy do tworzenia CSR serwera. Po trzecie,openssl ca
służy do utworzenia certyfikatu serwera i poświadczenia go podpisem urzędu certyfikacji.openssl-ca.cnf
iopenssl-server.cnf
. Po tym, jak się do nich przyzwyczaisz i jak wywoływane są sekcje, możesz połączyć je w potwornośćopenssl.cnf
.Oprócz odpowiedzi na @jww chciałbym powiedzieć, że konfiguracja w openssl-ca.cnf,
określa domyślną liczbę dni, przez którą certyfikat podpisany przez root-ca będzie ważny. Aby ustawić ważność samego root-ca, powinieneś użyć opcji '-days n' w:
Jeśli tego nie zrobisz, Twój root-ca będzie ważny tylko przez domyślny jeden miesiąc, a każdy certyfikat podpisany przez ten główny urząd certyfikacji będzie również ważny przez jeden miesiąc.
źródło