Jak zapisać certyfikat SSL zdalnego serwera lokalnie jako plik

319

Muszę pobrać certyfikat SSL zdalnego serwera (nie HTTPS, ale uzgadnianie SSL powinno być takie samo jak Google Chrome / IE / wget i curl wszystkie dają błędy niepowodzenia sprawdzania certyfikatów) i dodać certyfikat jako zaufany w moich laptopach Windows ” magazyn certyfikatów, ponieważ nie jestem w stanie zmusić informatyków do wystawienia certyfikatu CA.

dotyczy to komunikacji biurowej, więc nie mogę tak naprawdę użyć klienta do uzyskania certyfikatu.

Jak to zrobić, mam pod ręką Windows 7 i stos Linuxesów, więc każdy język narzędzi / skryptów jest w porządku.

Kimvais
źródło
Aby uzyskać certyfikat serwera pocztowego , zobacz security.stackexchange.com/questions/70528/...
Ten Brazylijczyk
Najprawdopodobniej Twoja przeglądarka ma do tego wbudowaną funkcję - być może w ramach „narzędzi programistycznych”.
nobar

Odpowiedzi:

316

Jeśli masz dostęp do OpenSSL, spróbuj

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

zastępując {HOSTNAME} i {PORT} dowolnymi wartościami.

gbroiles
źródło
2
Wolę tę opcję, ponieważ nie muszę otwierać GUI i mogę to zrobić za pośrednictwem SSH z naszych serwerów.
bramp
2
Dodatkowo działa dla protokołów innych niż HTTP.
mat
14
Rozwiązanie elec3647 w pełni automatyzuje ekstrakcję PEM w potoku powłoki.
phs
4
443 jest domyślnym portem dla HTTPS.
Flimm
4
Potrzebowałem -servernameopcji, aby uzyskać certyfikat hosta wirtualnego. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan
240

Szybkim sposobem na pobranie i pobranie certyfikatu byłoby uruchomienie następującego polecenia, które przesyła dane wyjściowe z -showcerts do polecenia x509 ssl, które po prostu usuwa wszystko, co obce. Na przykład:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Aby użyć certyfikatu za pomocą wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem
elec3647
źródło
5
Próbowałem tego (na innej stronie internetowej) - ale oczekiwano pełnego łańcucha certyfikatów: wydaje się, że przywróciło to tylko pierwszy w łańcuchu - czy tego należy się spodziewać?
monojohnny
8
To nie działa dla mnie: nie można załadować certyfikatu 27262: błąd: 0906D06C: Procedury PEM: PEM_read_bio: brak linii startowej: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Oczekiwany: ZAUFANY CERTYFIKAT
Janusz
4
Zgadzam się z monojohnny, to nie daje ci pełnego łańcucha.
Michael Munsey,
4
Późno, ale @monojohnny: openssl s_client -showcertswyświetla wszystkie certyfikaty w odebranym łańcuchu (jeśli połączenie się powiedzie), ale przesyłanie potokowe openssl x509zajmuje tylko pierwszy i odrzuca resztę. Aby uzyskać wszystkie z nich zamiast używać ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'lub ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'można również użyć nieco bardziej skomplikowana awk, aby umieścić każdy cert w oddzielnym pliku, który czyni je łatwiejszymi w użyciu openssli kilka innych narzędzi.
dave_thompson_085
3
używając wget wydaje się, że zapisuje tylko index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE
126

Szczerze mówiąc, nigdy wcześniej tego nie próbowałem (nigdy nie musiałem), ale właśnie próbowałem w Firefoksie i wydaje się, że działa w celu zapisywania:

  1. Kliknij ikonę certyfikatu SSL u góry / kłódkę u dołu.
  2. Kliknij View Certificate
  3. Kliknij Detailskartę
  4. Wybierz, który certyfikat chcesz z hierarchii [nie zakreślony na obrazku]
  5. Kliknij Export

alternatywny tekst

William Hilsum
źródło
Dobrze wiedzieć - ale z mojej ciekawości możesz wyjaśnić nieco więcej, co próbujesz osiągnąć? Nigdy nie musiałem eksportować certyfikatu klienta SSL i jestem bardzo ciekawy, dlaczego tak naprawdę musiałbyś to zrobić ...
William Hilsum,
1
To certyfikat serwera, a nie certyfikat klienta. Głównym powodem eksportowania prywatnego klucza i certyfikatu klienta jest utrzymanie kopii zapasowej lub jeśli chcesz się uwierzytelnić za pomocą innej przeglądarki lub komputera.
gbroiles
@ gbroiles - przeczytaj pytanie, użył złej terminologii, ale to rozwiązało jego problem.
William Hilsum,
1
tak, a ja odpowiedziałem na twoje pytanie - dlaczego ktoś miałby chcieć zapisać certyfikat klienta? „Certyfikat klienta SSL” był twoim terminem, a nie jego.
gbroiles
1
Nie wygląda na to, że można to zrobić w Chrome, prawda ?!
fatuhoku
50

Eksportowanie certyfikatu za pomocą przeglądarki Chrome

  1. Połącz się z witryną za pomocą protokołu SSL ( https: // cokolwiek )

2. Kliknij symbol kłódki, a następnie kliknij Szczegóły

  1. Od wersji 56 Chrome wykonujesz następujące czynności: przejdź do menu Trzy kropki -> Więcej narzędzi -> Narzędzia dla programistów, a następnie kliknij kartę Zabezpieczenia. To da ci przegląd bezpieczeństwa z przyciskiem Wyświetl certyfikat .

  2. Kliknij przycisk Wyświetl certyfikat .

    Otworzy się okno modalne. Ma dwie szyby. Górny pokazuje hierarchię zaufania certyfikatu witryny (ostatni na liście), certyfikaty pośrednie i certyfikat główny (najwyższy).

    Drugi, większy panel, pokazuje szczegóły jednego z certyfikatów.

    Może być zero lub więcej certyfikatów pośrednich.

    Zauważ, że certyfikat główny ma złotą ikonę. Pozostałe mają niebieską ramkę.

    Zobacz zrzut ekranu poniżej.

  3. Aby wyeksportować certyfikat:

    1. Najpierw kliknij ikonę certyfikatu w hierarchii zaufania.
    2. Certyfikat zostanie pokazany w głównej części modułu.
    3. Kliknij dużą ikonę certyfikatu w głównej części modalu. Przeciągnij ikonę na pulpit. Chrome skopiuje następnie certyfikat na pulpit.

wprowadź opis zdjęcia tutaj

Larry K.
źródło
1
Musiałem przeciągnąć ikonę do edytora tekstu, pulpit nie działał dla mnie.
Cory Klein
2
W przypadku Chrome w systemie Windows po kliknięciu przycisku „Wyświetl certyfikat” modal różni się od Maca. Kliknij kartę Szczegóły, a następnie Kopiuj do pliku ... Następnie wybierz format i nazwę pliku, które są proste.
PolyTekPatrick
1
Gdy korzystam z Chrome v63 w systemie Mac OS, plik tekstowy, który otrzymuję po przeciągnięciu certyfikatu, jest czytelny dla ludzi, ale nie ma żadnego ustrukturyzowanego formatu, który potrafię wymyślić, jak przekonwertować do postaci czytelnej dla komputera, takiej jak X.509 .crt.
Jim DeLaHunt,
bez różnicy, jeśli
otworzysz
1
Już nie działa w Chrome 72.0.3626.121
A. D'Alfonso
20

To jest odpowiedź gbroilesa , ale chciałem zwrócić uwagę, że projekt cURL ma stronę z kilkoma dodatkowymi informacjami na tematopenssl zapisywania certyfikatu SSL zdalnego serwera:

  • openssl s_client -connect {HOSTNAME}: {PORT} | plik dziennika tee
  • Wpisz QUITi naciśnij klawisz Enter / Return.
  • Certyfikat będzie wymieniony między znacznikami „ROZPOCZNIJ CERTYFIKAT” i „KONIEC CERTYFIKATU”.
  • Jeśli chcesz zobaczyć dane w certyfikacie, możesz użyć:

    openssl x509 -inform PEM -w pliku-certyfikatu -tekst -out certyfikaty

    skąd certfilejest pobierany certyfikat logfile. Zajrzyj do środka certdata.

Daniel Trebbien
źródło
To zadziałało dla mnie. Aby być bardziej precyzyjnym, edytowałem plik dziennika i przyciąłem wszystko, co było poza BEGIN CERTIFICATE i END CERTIFICATE i zapisałem wynik jako certfile.pem (Nie jestem pewien, czy rozszerzenie było konieczne).
Michael Welch,
16

zautomatyzowane

-servername był wymagany, aby uzyskać odpowiedni certyfikat z wirtualnego hosta na naszym serwerze.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

możesz także przekonwertować na certyfikat na komputer

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

ostatnia część to dodanie go do certyfikatów, nie jestem pewien w systemie Windows
dla pęku kluczy Mac, którego użyłem, powinno być podobne ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer

Artistan
źródło
Zauważ, że niektóre aplikacje mają problemy z pękami kluczy System i SystemRoot (Golang, patrzę na Ciebie), więc po zainstalowaniu i ustawieniu zaufania dla tych poziomów możesz również chcieć skopiować je do własnego użytkownika za login.keychainpośrednictwem Keychain Accessaplikacji, możesz po prostu przejść do certyfikatu w System / SystemRoot oraz kliknąć i przeciągnąć go do loginpęku kluczy.
dragon788,
1
@ dragon788 - moim zamiarem było zautomatyzowanie tego za pomocą wiersza poleceń i to działa dla mnie. Udostępnij tutaj, jeśli znajdziesz rozwiązanie dla login.keychain poprzez CLI! dzięki!
Artistan
sądząc z tego, co przeczytałem w Internecie, uważam, że pominięcie -dpolecenia będzie dotyczyło tylko pęku kluczy użytkownika zamiast pęku kluczy Systemu.
dragon788
Jeśli dodajesz również certyfikaty pośrednie, których chcesz użyć trustAsRootzamiast trustRoot, aby poprawnie je dodać.
dragon788
2

To da wyniki zawierające tylko certyfikaty

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "
Archimedes Trajano
źródło
0

Znaleziono o wiele łatwiejszy sposób, jeśli w systemie Windows. Wypróbowałem Microsoft Edge (pre-chrom) i kliknąłem blokadę na pasku adresu -> Wyświetl okno dialogowe certyfikatu wyskakuje z przyciskiem „Eksportuj do pliku”, który zapisuje go jako plik .crt.

Niewiele użyłbym Edge'a, ale to był bułka z masłem.

Dale Wilbanks
źródło