Pertanyaan cara mengunduh sertifikat ssl dari situs web?


Saya ingin mengunduh sertifikat ssl dari, katakanlah https://www.google.com, menggunakan wget atau perintah lainnya. Baris perintah unix apa saja? wget atau openssl?


162
2018-05-07 21:01






Jawaban:


Untuk mengunduh sertifikat, Anda perlu menggunakan klien yang dibangun ke dalam openssl seperti:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

Itu akan menyimpan sertifikat ke /tmp/$SERVERNAME.cert.

Kamu bisa memakai -showcerts jika Anda ingin mengunduh semua sertifikat dalam rantai. Tetapi jika Anda hanya ingin mengunduh sertifikat server, tidak perlu disebutkan -showcerts

echo -n memberikan respon ke server, sehingga koneksi dilepaskan

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' menghapus informasi tentang rantai sertifikat dan detail koneksi. Ini adalah format pilihan untuk mengimpor sertifikat ke keystroke lainnya.


219
2017-10-19 22:59



hargai bahwa Anda tidak hanya memberikan jawaban yang bagus, tetapi juga penjelasan yang tepat. - marco.m
Apakah -showcerts menunjukkan sertifikat server / daun juga? Saya pikir itu hanya menampilkan perantara ketika tombol itu dimasukkan. - Mike B
Seperti yang dikatakan jawabannya, s_client selalu menunjukkan sertifikat server (jika ada, yaitu server merespons halo dan tidak memilih suite anonim). -showcerts pertunjukan semua sertifikat yang diterima, server cert pertama kemudian intermediet dan / atau root. - dave_thompson_085
ini tidak berfungsi dalam kehadiran proxy, meskipun. - Frederick Nord
Ini juga tidak bekerja dengan server yang menggunakan SNI (beberapa sertifikat / domain pada satu alamat IP). Untuk menghindari masalah, tentukan parameter servername openssl: openssl s_client -connect HOST: PORTNUMBER -servername CN - verhage


Saya menemukan jawabannya. Openssl menyediakannya.

openssl s_client -connect $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



juga openssl x509 -text <<EOF cert-text EOF untuk melihat detail sertifikat - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem courtesy of serverfault.com/questions/139728/… - pulkitsinghal
ini melakukan hal yang sama dan melompati sed meretas. - phs
Ini hanya memeriksa satu sertifikat, bagaimana jika layanan tersebut merupakan bagian dari kelompok server yang seimbang, yang masing-masing memiliki sertifikat yang berbeda, kemungkinan ditandatangani oleh CA akar yang berbeda? Atau dengan kata lain, serangan mitm mungkin membiarkan permintaan ini masuk ke situs sebenarnya, dan kemudian mengarahkan permintaan lain ke servernya. Apakah ada cara untuk memeriksanya? Dan untuk mendapatkan daftar semua sertifikat yang benar-benar dimiliki domain? - Jens Timmerman
@JensTimmerman "Atau dengan kata lain, serangan mitm mungkin membiarkan permintaan ini masuk ke situs sebenarnya, dan kemudian mengarahkan permintaan lain ke servernya." Itu tidak mungkin kecuali man-in-the-middle memiliki sertifikat yang valid untuk server target (atau klien konyol tidak memeriksa sertifikat server). Terbukti, jika server terkadang menawarkan sertifikat yang berbeda, Anda hanya dapat berharap untuk akhirnya mendapatkan semuanya dengan mengulangi upaya koneksi. - David Tonhofer


Itu GNUTLS alat klien, gnutls-cli, juga bisa mempermudah ini:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

Program ini dirancang untuk menyediakan klien interaktif ke situs, jadi Anda harus memberikannya masukan kosong (dalam contoh ini, dari /dev/null) untuk mengakhiri sesi interaktif.


20
2017-10-07 06:19



bagaimana caranya membuat gnutls terhubung melalui (sistem yang dikonfigurasi luas) https proxy dan mencetak sertifikat itu exchages? - Frederick Nord


berdasarkan jawaban @bignose, di sini adalah versi mandiri yang cocok dengan misalnya resep koki:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

mode openssl ini mengharapkan stdin, jadi kami menyediakannya melalui true |, ini terhubung ke server yang ditentukan dalam parameter -connect. 2>/dev/null membungkam kesalahan (opsional), kita dapat melewatkan seluruh output ke parser x509, menentukan /dev/stdin untuk menggunakan pipa shell sebagai file input. Dan itu hanya akan menghasilkan -----BEGIN CERTIFICATE----- untuk -----END CERTIFICATE----- bagian dari s_client keluaran. Anda dapat mengalihkan itu ke file dengan menambahkan > google.com.pem sampai akhir komando.


Sejauh yang saya tahu, ini tidak memverifikasi rantai sertifikat, hanya dapat memberi tahu Anda apa ssl identitas server akhir menyediakan.


6
2018-01-12 10:38



(1) ini tidak benar-benar meningkatkan jawaban dari 6 tahun yang lalu (2) x509 membaca stdin secara default -in /dev/stdin redundan (3) s_client memverifikasi sertifikat server dengan benar ke jangkar kepercayaan lokal (root) dan tidak ada, tetapi Anda telah menekan informasi yang akan menunjukkan ini (4) TIDAK memeriksa pencabutan (5) ia memeriksa nama di sertifikat server hanya dalam 1.0.2 dan kemudian tidak secara default (tetapi Anda dapat dengan mudah memeriksa sendiri dengan melihat sertifikat sesudahnya) - dave_thompson_085
@ dave_thompson_085, pertanyaannya adalah cara mengunduh sertifikat, tetapi tidak menampilkan informasi rantai. Saya suka openssl x509 jauh lebih baik daripada sed dalam jawaban lain. - Der_Meister


Sintaks alternatif menggunakan Ex dan substitusi proses:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0