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 -showcerts
jika 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.
-showcerts
menunjukkan sertifikat server / daun juga? Saya pikir itu hanya menampilkan perantara ketika saklar itu dimasukkan.
s_client
selalu tunjukkan sertifikat server (jika ada, yaitu server merespons halo dan tidak memilih suite anonim). -showcerts
menunjukkan 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 EOF
untuk 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.pem
milik 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/null
kesalahan hening (opsional), kita dapat melewatkan seluruh output ke parser x509, yang menentukan /dev/stdin
untuk menggunakan pipa shell sebagai file input. Dan itu akan menampilkan hanya -----BEGIN CERTIFICATE-----
untuk -----END CERTIFICATE-----
sebagian dari s_client
output. Anda bisa mengarahkan itu ke file dengan menambahkan > google.com.pem
ke 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.
x509
membaca stdin secara default sehingga -in /dev/stdin
redundan (3) s_client
memverifikasi 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)