Bagaimana cara menyimpan sertifikat server jauh SSL secara lokal sebagai file

319

Saya perlu mengunduh sertifikat SSL server jarak jauh (bukan HTTPS, tetapi jabat tangan SSL harus sama dengan Google Chrome / IE / wget dan meringkuk semua memberikan kesalahan pemeriksaan sertifikat gagal) dan menambahkan sertifikat yang dipercaya di laptop saya Windows ' toko sertifikat karena saya tidak bisa mendapatkan orang-orang IT saya untuk memberi saya sertifikat CA.

ini untuk komunikasi kantor jadi saya tidak bisa menggunakan klien yang sebenarnya untuk mendapatkan sertifikat.

Bagaimana saya melakukan ini, saya memiliki Windows 7 dan setumpuk Linux berguna sehingga alat / bahasa scripting baik-baik saja.

Kimvais
sumber
Untuk mendapatkan sertifikat server surat , lihat security.stackexchange.com/questions/70528/…
Si Pria Brasil
Kemungkinan besar, peramban Anda memiliki fitur bawaan untuk ini - mungkin di bawah "alat pengembang".
nobar

Jawaban:

316

Jika Anda memiliki akses ke OpenSSL, coba

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

mengganti {HOSTNAME} dan {PORT} dengan apa pun nilai Anda.

gbroiles
sumber
2
Saya lebih suka opsi ini karena saya tidak harus membuka GUI, dan saya bisa melakukannya melalui SSH dari server kami.
bramp
2
Plus itu berfungsi untuk protokol selain HTTP.
matt
14
solusi elec3647 sepenuhnya mengotomatiskan ekstraksi PEM dalam pipa shell
phs
4
443 adalah port default untuk HTTPS.
Flimm
4
Saya membutuhkan -servernameopsi untuk mendapatkan sertifikat virtual host. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan
240

Metode cepat untuk mendapatkan sertifikat ditarik dan diunduh adalah dengan menjalankan perintah berikut yang menyalurkan output dari -showcerts ke perintah x509 ssl yang hanya menghapus semuanya secara asing. Sebagai contoh:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Untuk menggunakan sertifikat, dengan wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem
elec3647
sumber
5
Saya mencoba ini (di situs web lain) - tetapi diharapkan seluruh rangkaian sertifikat: sepertinya ini hanya mengembalikan yang pertama dalam rantai - apakah itu yang diharapkan?
monojohnny
8
Itu tidak berfungsi untuk saya: tidak dapat memuat sertifikat 27262: kesalahan: 0906D06C: rutinitas PEM: PEM_read_bio: tidak ada garis awal: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Mengharapkan: TRUSTED: CERTIFICATE
Janusz
4
Saya setuju dengan monojohnny, ini tidak memberi Anda rantai penuh.
Michael Munsey
4
Terlambat tetapi @monojohnny: openssl s_client -showcertsmenampilkan semua sertifikat dalam rantai yang diterima (jika koneksi berhasil), tetapi openssl x509hanya mengambil pip yang pertama dan membuang yang lain. Untuk mendapatkan semuanya, gunakan ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'atau ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'Anda juga dapat menggunakan yang sedikit lebih rumit awkuntuk meletakkan setiap sertifikat dalam file terpisah yang membuatnya lebih mudah digunakan dengan openssldan beberapa alat lainnya.
dave_thompson_085
3
menggunakan wget tampaknya hanya menyimpan a index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE
126

Sejujurnya, saya belum pernah mencoba ini sebelumnya (tidak pernah perlu) namun, saya baru saja mencoba di Firefox dan tampaknya berfungsi untuk menghemat:

  1. Klik pada ikon sertifikat SSL di bagian atas / Gembok di bagian bawah.
  2. Klik View Certificate
  3. Klik pada DetailsTab
  4. Pilih sertifikat mana yang Anda inginkan dari hierarki [tidak dilingkari dalam gambar]
  5. Klik Export

teks alternatif

William Hilsum
sumber
Baik untuk diketahui - tetapi untuk rasa ingin tahu saya, dapatkah Anda menjelaskan sedikit lebih banyak tentang apa yang ingin Anda capai? Saya tidak pernah perlu untuk mengekspor sertifikat klien SSL dan saya sangat ingin tahu mengapa Anda benar-benar perlu melakukannya ...
William Hilsum
1
Itu adalah sertifikat server, bukan sertifikat klien. Alasan utama untuk mengekspor kunci pribadi & sertifikat klien adalah untuk mempertahankan cadangan, atau jika Anda ingin mengautentikasi menggunakan browser atau komputer lain.
gbroiles
@gbroiles - baca pertanyaannya, dia menggunakan terminologi yang salah, tapi ini menyelesaikan masalahnya.
William Hilsum
1
benar, dan saya menjawab pertanyaan Anda - mengapa seseorang ingin menyimpan sertifikat klien? "Sertifikat klien SSL" adalah istilah Anda, bukan miliknya.
gbroiles
1
Sepertinya tidak ada cara untuk melakukan ini di Chrome, kan ?!
fatuhoku
50

Mengekspor sertifikat menggunakan browser Chrome

  1. Sambungkan ke situs web menggunakan SSL ( https: // apa pun )

2. Klik pada simbol kunci dan kemudian klik pada Detail

  1. Sejak Chrome versi 56, Anda melakukan hal berikut: buka Menu Tiga Titik -> Lebih Banyak Alat -> Alat Pengembang, lalu klik pada Tab Keamanan. Ini akan memberi Anda Tinjauan Keamanan dengan tombol Lihat sertifikat .

  2. Klik pada tombol Lihat sertifikat .

    Jendela modal akan terbuka. Ini memiliki dua panel. Yang paling atas menunjukkan hierarki kepercayaan dari sertifikat situs (yang terakhir terdaftar), sertifikat menengah, dan sertifikat root (yang paling atas).

    Panel kedua, yang lebih besar, menunjukkan detail salah satu sertifikat.

    Mungkin ada nol atau lebih sertifikat menengah.

    Perhatikan bahwa sertifikat root memiliki ikon berbatasan emas. Yang lain memiliki perbatasan biru.

    Lihat tangkapan layar di bawah ini.

  3. Untuk mengekspor sertifikat:

    1. Klik pertama pada ikon sertifikat di hierarki kepercayaan.
    2. Sertifikat akan ditampilkan di bagian utama modal.
    3. Klik ikon besar sertifikat di bagian utama modal. Seret ikon ke desktop Anda. Chrome kemudian akan menyalin sertifikat ke desktop Anda.

masukkan deskripsi gambar di sini

Larry K
sumber
1
Saya harus menyeret ikon ke editor teks, desktop tidak berfungsi untuk saya.
Cory Klein
2
Untuk Chrome di Windows, setelah Anda mengklik 'Lihat sertifikat' modalnya berbeda dari Mac. Klik tab Detail dan kemudian Salin ke File ... Kemudian pilih format dan nama file, yang mudah.
PolyTekPatrick
1
Ketika saya menggunakan Chrome v63 pada Mac OS, file teks yang saya dapatkan dari menyeret sertifikat itu dapat dibaca oleh manusia, tetapi tidak dalam format terstruktur apa pun yang dapat saya temukan bagaimana cara mengubahnya menjadi bentuk yang dapat dibaca mesin seperti X.509 .crt.
Jim DeLaHunt
tidak ada perbedaan jika membuka dari bilah alamat atau dari tab dev ini, dan masih tidak dapat mengunduh crt ...
user25
1
Tidak berfungsi lagi di Chrome 72.0.3626.121
A. D'Alfonso
20

Ini adalah jawaban gbroiles , tetapi saya ingin menunjukkan bahwa proyek cURL memiliki halaman dengan beberapa detail lebih lanjut tentang cara menggunakan openssluntuk menyimpan sertifikat SSL server jarak jauh:

  • openssl s_client -connect {HOSTNAME}: {PORT} | file log tee
  • Ketik QUITdan tekan tombol Enter / Return.
  • Sertifikat akan dicantumkan di antara penanda "BEGIN CERTIFICATE" dan "END CERTIFICATE".
  • Jika Anda ingin melihat data dalam sertifikat, Anda dapat menggunakan:

    openssl x509-informasikan PEM -in certfile -text -out certdata

    dari mana certfilesertifikat diekstraksi logfile. Lihat certdata.

Daniel Trebbien
sumber
Ini berhasil untuk saya. Untuk menjadi sedikit lebih eksplisit, saya mengedit file log dan memangkas semua yang ada di luar BEGIN CERTIFICATE dan END CERTIFICATE dan menyimpan hasilnya sebagai certfile.pem (Tidak yakin apakah ekstensi itu diperlukan).
Michael Welch
16

otomatis

-servername diperlukan bagi saya untuk mendapatkan sertifikat yang tepat dari virtual host di server kami.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

Anda juga dapat mengonversi ke sertifikat untuk desktop

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

Bagian terakhir adalah menambahkannya ke sertifikat Anda, tidak yakin pada windows
untuk mac keychain yang saya gunakan, harus mirip ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer

Artistan
sumber
Perhatikan bahwa beberapa aplikasi mengalami masalah dengan gantungan kunci System dan SystemRoot (Golang, saya melihat ANDA), jadi setelah menginstal dan mengatur kepercayaan untuk level tersebut, Anda mungkin juga ingin menyalinnya ke pengguna Anda sendiri login.keychainmelalui Keychain Accessaplikasi, Anda cukup telusuri sertifikat di System / SystemRoot dan klik dan seret ke logingantungan kunci Anda .
dragon788
1
@ dragon788 - maksud saya adalah untuk mengotomatisasi ini dengan baris perintah dan ini berfungsi untuk saya. Silakan berbagi di sini jika Anda menemukan solusi untuk login.keychain via CLI juga! Terima kasih!
Artistan
menilai dari apa yang saya baca di web saya percaya hanya menghilangkan -ddari perintah akan berlaku hanya untuk gantungan kunci pengguna dan bukan pada gantungan kunci Sistem.
dragon788
Jika Anda juga menambahkan sertifikat perantara, Anda akan ingin menggunakannya trustAsRootsebagai ganti trustRootagar dapat ditambahkan dengan benar.
dragon788
2

Ini akan memberikan hasil yang hanya berisi sertifikat

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "
Archimedes Trajano
sumber
0

Menemukan cara yang jauh lebih mudah jika di Windows. Mencoba Microsoft Edge (pre-chromium) dan mengklik kunci di bilah alamat -> Lihat sertifikat Dialog muncul dengan tombol "Ekspor ke File", yang menyimpannya sebagai file .crt.

Tidak banyak yang akan saya gunakan untuk Edge, tapi ini sepotong kue.

Dale Wilbanks
sumber