Próbuję uzyskać certyfikat zdalnego serwera, którego mogę użyć do dodania do mojego magazynu kluczy i użycia w mojej aplikacji Java.
Starszy programista (który jest na wakacjach :() poinformował mnie, że mogę to uruchomić:
openssl s_client -connect host.host:9999
Aby zrzucić surowy certyfikat, który mogę następnie skopiować i wyeksportować. Otrzymuję następujące dane wyjściowe:
depth=1 /C=NZ/ST=Test State or Province/O=Organization Name/OU=Organizational Unit Name/CN=Test CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
23177:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1086:SSL alert number 40
23177:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
Próbowałem również z tą opcją
-showcerts
i ten (działający na Debianie, pamięta cię)
-CApath /etc/ssl/certs/
Ale dostań ten sam błąd.
To źródło mówi, że mogę użyć tej flagi CApath, ale nie wydaje się to pomocne. Próbowałem wielu ścieżek bezskutecznie.
Daj mi znać, gdzie się mylę.
źródło
echo "" | openssl s_client -connect server:port -prexit 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'
stackoverflow.com/a/12918442/843000echo | openssl s_client -connect server:port 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
sed
zopenssl x509
, i czytać je w użyciu sub-shell:openssl x509 -in <(openssl s_client -connect server:port -prexit 2>/dev/null)
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
Chociaż zgadzam się z odpowiedzią Ari (i wziąłem udział w głosowaniu :), musiałem zrobić dodatkowy krok, aby uruchomić ją z Javą w systemie Windows (gdzie trzeba ją wdrożyć):
Przed dodaniem
openssl x509 -outform DER
konwersji otrzymywałem błąd z keytoola w systemie Windows, skarżąc się na format certyfikatu. Import pliku .der działał poprawnie.źródło
Okazuje się, że tutaj jest bardziej złożona: musiałem podać o wiele więcej szczegółów, aby to się stało. Myślę, że ma to coś wspólnego z faktem, że jest to połączenie wymagające uwierzytelnienia klienta, a hankshake potrzebował więcej informacji, aby przejść do etapu, w którym certyfikaty zostały zrzucone.
Oto moje działające polecenie:
Mamy nadzieję, że jest to krok w dobrym kierunku dla każdego, kto mógłby zrobić więcej informacji.
źródło
Jednoliniowy program do wypakowywania certyfikatu ze zdalnego serwera w formacie PEM, tym razem przy użyciu
sed
:źródło
-servername
opcji, nie wiem dlaczego, ale musiałem go użyć, aby uzyskać pełny certyfikat.Najłatwiejszym do tego wierszem poleceń, który zawiera wyjście PEM w celu dodania go do magazynu kluczy, a także wyjście czytelne dla człowieka, a także obsługuje SNI, co jest ważne, jeśli pracujesz z serwerem HTTP:
Opcja -servername umożliwia włączenie obsługi SNI, a tekst openssl x509 drukuje certyfikat w formacie czytelnym dla człowieka.
źródło
Aby uzyskać certyfikat zdalnego serwera, możesz użyć
openssl
narzędzia i możesz je znaleźć pomiędzy,BEGIN CERTIFICATE
aEND CERTIFICATE
które musisz skopiować i wkleić do pliku certyfikatu (CRT).Oto polecenie, które to pokazuje:
Aby zwrócić wszystkie certyfikaty z łańcucha, wystarczy dodać
g
(globalny) jak:Następnie możesz po prostu zaimportować plik certyfikatu (
file.crt
) do pęku kluczy i uczynić go zaufanym, aby Java nie narzekała.W systemie OS X możesz dwukrotnie kliknąć plik lub przeciągnąć i upuścić dostęp do pęku kluczy, aby pojawił się w loginie / certyfikatach. Następnie kliknij dwukrotnie importowany certyfikat i ustaw opcję Zawsze ufaj SSL .
W CentOS 5 możesz dołączyć je do
/etc/pki/tls/certs/ca-bundle.crt
pliku (i uruchomićsudo update-ca-trust force-enable
:), lub w CentOS 6 skopiować je/etc/pki/ca-trust/source/anchors/
i uruchomićsudo update-ca-trust extract
.W Ubuntu skopiuj je
/usr/local/share/ca-certificates
i uruchomsudo update-ca-certificates
.źródło
źródło
aby wydrukować tylko łańcuch certyfikatów, a nie certyfikat serwera:
aby zaktualizować zaufanie CA do CentOS / RHEL 6/7:
w CentOS / RHEL 5:
źródło
Możesz uzyskać i zapisać certyfikat główny serwera, używając następnego skryptu bash:
Po prostu nadpisz wymagane zmienne.
źródło
Jeśli twój serwer to serwer e-mail (MS Exchange lub Zimbra), być może musisz dodać flagi
starttls
ismtp
:openssl s_client -starttls smtp -connect HOST_EMAIL:SECURE_PORT 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > CERTIFICATE_NAME.pem
Gdzie,
HOST_EMAIL to domena serwera, na przykład mail-server.com.
SECURE_PORT to port komunikacyjny, na przykład 587 lub 465
Nazwa pliku wyjściowego CERTIFICATE_NAME (format BASE 64 / PEM)
źródło
Z korzyścią dla innych, takich jak ja, którzy próbowali postępować zgodnie z dobrą radą podczas uzyskiwania dostępu do AWS CloudFront, ale nie udało się, sztuczka polega na dodaniu
-servername domain.name..
.Źródło: https://serverfault.com/a/780450/8972
źródło