Saya ingin mengunduh sertifikat ssl dari, katakan https://www.google.com , menggunakan wget atau perintah lain. Adakah baris perintah unix? wget atau openssl?
Saya ingin mengunduh sertifikat ssl dari, katakan https://www.google.com , menggunakan wget atau perintah lain. Adakah baris perintah unix? wget atau openssl?
Jawaban:
Untuk mengunduh sertifikat, Anda harus menggunakan klien yang terintegrasi dengan openssl seperti:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Itu akan menyimpan sertifikat /tmp/$SERVERNAME.cert.
Anda dapat menggunakan -showcertsjika Anda ingin mengunduh semua sertifikat dalam rantai. Tetapi jika Anda hanya ingin mengunduh sertifikat server, tidak perlu menentukan-showcerts
echo -n memberikan respons ke server, sehingga koneksi dilepaskan
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'menghapus informasi tentang rantai sertifikat dan detail koneksi. Ini adalah format yang disukai untuk mengimpor sertifikat ke keystore lain.
-showcertsmenunjukkan sertifikat server / daun juga? Saya pikir itu hanya menampilkan perantara ketika saklar itu dimasukkan.
s_clientselalu tunjukkan sertifikat server (jika ada, yaitu server merespons halo dan tidak memilih suite anonim). -showcertsmenunjukkan semua sertifikat yang diterima, server cert pertama kemudian perantara dan / atau root.
Saya menemukan jawabannya. Openssl menyediakannya.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOFuntuk melihat detail sertifikat
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pemmilik serverfault.com/questions/139728/…
The GnuTLS alat klien, gnutls-cli, juga dapat membuat ini mudah:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Program ini dirancang untuk menyediakan klien interaktif ke situs, sehingga Anda harus memberikan input kosong (dalam contoh ini, dari /dev/null) untuk mengakhiri sesi interaktif.
berdasarkan jawaban @bignose, berikut ini adalah versi lengkap yang cocok untuk 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
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/nullkesalahan hening (opsional), kita dapat melewatkan seluruh output ke parser x509, yang menentukan /dev/stdinuntuk menggunakan pipa shell sebagai file input. Dan itu akan menampilkan hanya -----BEGIN CERTIFICATE-----untuk -----END CERTIFICATE-----sebagian dari s_clientoutput. Anda bisa mengarahkan itu ke file dengan menambahkan > google.com.pemke akhir perintah.
Yang terbaik yang saya tahu, ini tidak memverifikasi rantai sertifikat, itu hanya dapat memberi tahu Anda apa ssl identitas yang disediakan server akhir.
x509membaca stdin secara default sehingga -in /dev/stdinredundan (3) s_clientmemverifikasi server cert dengan benar rantai ke jangkar kepercayaan lokal (root) dan tidak kedaluwarsa, tetapi Anda belum menekan informasi yang akan menunjukkan ini (4) itu TIDAK memeriksa pembatalan (5) itu memeriksa nama di server cert hanya di 1.0.2 dan kemudian tidak secara default (tetapi Anda dapat dengan mudah memeriksa sendiri dengan melihat sertifikat itu sesudahnya)