Meskipun saya setuju dengan jawaban Ari (dan memutakhirkannya :), saya perlu melakukan langkah ekstra untuk membuatnya berfungsi dengan Java di Windows (yang perlu diterapkan):
openssl s_client -showcerts -connect www.example.com:443 < /dev/null | openssl x509 -outform DER > derp.der
Sebelum menambahkan openssl x509 -outform DER
konversi, saya mendapatkan kesalahan dari keytool di Windows yang mengeluh tentang format sertifikat. Mengimpor file .der berfungsi dengan baik.
Ternyata ada lebih banyak kerumitan di sini:Saya perlu memberikan lebih banyak detail untuk memulai ini. Saya pikir ini ada hubungannya dengan fakta bahwa ini adalah koneksi yang memerlukan autentikasi klien, dan hankshake memerlukan lebih banyak info untuk melanjutkan ke tahap di mana sertifikat dibuang.
Ini perintah kerja saya:
openssl s_client -connect host:port -key our_private_key.pem -showcerts \
-cert our_server-signed_cert.pem
Mudah-mudahan ini adalah dorongan ke arah yang benar bagi siapa saja yang bisa melakukan dengan info lebih lanjut.
One-liner untuk mengekstrak sertifikat dari server jarak jauh dalam format PEM, kali ini menggunakan sed
:
openssl s_client -connect www.google.com:443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Dengan SNI
Jika server jarak jauh menggunakan SNI (yaitu, berbagi beberapa host SSL pada satu alamat IP), Anda harus mengirimkan nama host yang benar untuk mendapatkan sertifikat yang tepat.
openssl s_client -showcerts -servername www.example.com -connect www.example.com:443 </dev/null
Tanpa SNI
Jika remote server tidak menggunakan SNI, maka Anda dapat melewati -servername
parameter:
openssl s_client -showcerts -connect www.example.com:443 </dev/null
Untuk melihat detail lengkap sertifikat situs, Anda juga dapat menggunakan rantai perintah ini:
$ echo | \
openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | \
openssl x509 -text