Saya mencoba untuk mendapatkan sertifikat server jauh, yang kemudian dapat saya gunakan untuk menambah keystore saya dan menggunakan dalam aplikasi java saya.
Seorang pengembang senior (yang sedang berlibur :() memberi tahu saya bahwa saya dapat menjalankan ini:
openssl s_client -connect host.host:9999
Untuk mendapatkan sertifikat mentah yang dibuang, yang kemudian dapat saya salin dan ekspor. Saya menerima output berikut:
depth=1 /C=NZ/ST=Test State or Province/O=Organization Name/OU=Organizational Unit Name/CN=Test CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
23177:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1086:SSL alert number 40
23177:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
Saya juga sudah mencoba dengan opsi ini
-showcerts
dan yang ini (berjalan di debian mind you)
-CApath /etc/ssl/certs/
Tapi dapatkan kesalahan yang sama.
Sumber ini mengatakan saya bisa menggunakan flag CApath itu tetapi sepertinya tidak membantu. Saya mencoba beberapa jalur tetapi tidak berhasil.
Tolong beri tahu saya di mana saya salah.
sumber
echo "" | openssl s_client -connect server:port -prexit 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'
stackoverflow.com/a/12918442/843000echo | openssl s_client -connect server:port 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
sed
denganopenssl x509
, dan membacanya menggunakan sub-shell:openssl x509 -in <(openssl s_client -connect server:port -prexit 2>/dev/null)
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
Sementara saya setuju dengan jawaban Ari (dan meningkatkannya :), saya perlu melakukan langkah ekstra untuk membuatnya bekerja dengan Java pada Windows (di mana itu perlu digunakan):
Sebelum menambahkan
openssl x509 -outform DER
konversi, saya mendapatkan kesalahan dari keytool pada Windows mengeluh tentang format sertifikat. Mengimpor file .der berfungsi dengan baik.sumber
Ternyata ada lebih banyak kompleksitas di sini: Saya perlu memberikan lebih banyak detail untuk mendapatkan rolling ini. Saya pikir ini ada hubungannya dengan fakta bahwa ini adalah koneksi yang memerlukan otentikasi klien, dan hankshake memerlukan lebih banyak info untuk melanjutkan ke tahap di mana sertifikat dibuang.
Ini perintah kerja saya:
Semoga ini adalah dorongan ke arah yang benar bagi siapa saja yang bisa melakukan dengan beberapa info lebih lanjut.
sumber
Satu baris untuk mengekstrak sertifikat dari server jauh dalam format PEM, kali ini menggunakan
sed
:sumber
-servername
opsi, tidak tahu mengapa, tapi saya harus menggunakannya untuk mendapatkan sertifikat lengkap.Baris perintah termudah untuk ini, yang mencakup output PEM untuk menambahkannya ke keystore, serta output yang dapat dibaca manusia dan juga mendukung SNI, yang penting jika Anda bekerja dengan server HTTP adalah:
The -servername pilihan adalah untuk mengaktifkan dukungan SNI dan openssl x509 -teks cetak sertifikat dalam format yang dapat dibaca manusia.
sumber
Untuk mendapatkan sertifikat server jauh, Anda dapat menggunakan
openssl
alat dan Anda dapat menemukannya di antaraBEGIN CERTIFICATE
danEND CERTIFICATE
yang perlu Anda salin dan tempel ke file sertifikat (CRT) Anda.Ini adalah perintah yang menunjukkannya:
Untuk mengembalikan semua sertifikat dari rantai, cukup tambahkan
g
(global) seperti:Kemudian Anda cukup mengimpor file sertifikat Anda (
file.crt
) ke gantungan kunci Anda dan membuatnya tepercaya, jadi Java tidak perlu mengeluh.Pada OS X Anda dapat mengklik dua kali pada file atau seret dan lepas di Akses Keychain Anda, sehingga akan muncul di login / Sertifikat. Kemudian klik dua kali pada sertifikat yang diimpor dan membuatnya Selalu Percaya untuk SSL .
Pada CentOS 5 Anda dapat menambahkannya ke
/etc/pki/tls/certs/ca-bundle.crt
file (dan menjalankansudo update-ca-trust force-enable
:), atau di CentOS 6 menyalinnya ke dalam/etc/pki/ca-trust/source/anchors/
dan menjalankansudo update-ca-trust extract
.Di Ubuntu, salin ke
/usr/local/share/ca-certificates
dan jalankansudo update-ca-certificates
.sumber
sumber
untuk mencetak hanya rantai sertifikat dan bukan sertifikat server:
untuk memperbarui kepercayaan CA pada CentOS / RHEL 6/7:
pada CentOS / RHEL 5:
sumber
Anda bisa mendapatkan dan menyimpan sertifikat root server menggunakan skrip bash berikutnya:
Timpa saja variabel yang diperlukan.
sumber
Jika server Anda adalah server email (MS Exchange atau Zimbra) mungkin Anda perlu menambahkan
starttls
dansmtp
menandai:openssl s_client -starttls smtp -connect HOST_EMAIL:SECURE_PORT 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > CERTIFICATE_NAME.pem
Dimana,
HOST_EMAIL adalah domain server, misalnya, mail-server.com.
SECURE_PORT adalah port komunikasi, misalnya, 587 atau 465
Nama file keluaran CERTIFICATE_NAME (Format BASE 64 / PEM)
sumber
Untuk kepentingan orang lain seperti saya yang mencoba mengikuti saran bagus di sini ketika mengakses AWS CloudFront tetapi gagal, triknya adalah menambahkan
-servername domain.name..
.Sumber: https://serverfault.com/a/780450/8972
sumber