Saya memilikinya di konfigurasi ActiveMQ:
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
Saya memiliki sepasang sertifikat X.509 dan file kunci.
Bagaimana cara mengimpor keduanya untuk menggunakannya dalam konektor stomp SSL dan SSL +? Semua contoh saya bisa google selalu menghasilkan kunci sendiri, tetapi saya sudah punya kunci.
saya telah mencoba
keytool -import -keystore ./broker.ks -file mycert.crt
tetapi ini hanya mengimpor sertifikat dan bukan file kunci dan menghasilkan
2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
Saya telah mencoba menggabungkan sertifikat dan kunci tetapi mendapatkan hasil yang sama.
Bagaimana cara mengimpor kunci?
Jawaban:
Percaya atau tidak, keytool tidak menyediakan fungsionalitas dasar seperti mengimpor kunci pribadi ke keystore. Anda dapat mencoba solusi ini dengan menggabungkan file PKSC12 dengan kunci pribadi ke keystore.
Atau cukup gunakan lebih banyak KeyMan yang mudah digunakan dari IBM untuk penanganan keystore alih-alih keytool.exe.
sumber
Saya menggunakan dua langkah berikut yang saya temukan di komentar / posting yang tertaut dalam jawaban lain:
Langkah satu: Konversikan sertifikat x.509 dan kunci menjadi file pkcs12
Catatan: Pastikan Anda memasukkan kata sandi pada file pkcs12 - jika tidak, Anda akan mendapatkan pengecualian penunjuk nol saat Anda mencoba mengimpornya. (Kalau-kalau ada orang lain sakit kepala ini). ( Terima kasih jocull! )
Catatan 2: Anda mungkin ingin menambahkan
-chain
opsi untuk mempertahankan rantai sertifikat lengkap. ( Terima kasih, Mafuba )Langkah dua: Konversikan file pkcs12 ke Java keystore
Jadi
OPSIONAL Langkah nol: Buat sertifikat yang ditandatangani sendiri
Bersulang!
sumber
-CAfile ca.crt -caname root
tidak menghasilkan sertifikat CA dengan benar. Sebagai gantinya saya menggunakan-certfile concatenedCAFiles.pem
-chain
argumen dengan openssl untuk memasukkan rantai sertifikat lengkap dalam file pfx / p12 Anda jika Anda menginginkannya di penyimpanan kunci Anda.pvk2pfx
(alat VS standar tersedia di VScmd
prompt) akan memuntahkan -.pfx
sama dengan a.p12
. Saran jocull masih relevan; letakkan kata sandi di atasnya. Tidakopenssl
dibutuhkan.p12
kunci akan memiliki kata sandi.p12.
Tomcat asli akan gagaljava.security.UnrecoverableKeyException: Cannot recover key
. Dengan kata lain: jika Anda perlu mengeksekusi-deststorepass changeit -srcstorepass some-password
dengan kata sandi yang berbeda , maka Anda harus memasukkan-destkeypass changeit
(dengan kata sandi yang sama dengan-deststorepass
)Keytool di Java 6 memang memiliki kemampuan ini: Mengimpor kunci pribadi ke keystore Java menggunakan keytool
Berikut adalah rincian dasar dari pos itu.
Konversikan sertifikat yang ada ke PKCS12 menggunakan OpenSSL. Kata sandi diperlukan saat ditanya atau langkah ke-2 akan mengeluh.
Konversikan PKCS12 ke File Java Keystore.
sumber
Dan satu lagi:
sumber
Konversi pertama ke p12:
Buat JKS baru dari p12:
sumber
Ya, memang fakta yang menyedihkan bahwa keytool tidak memiliki fungsionalitas untuk mengimpor kunci pribadi.
Sebagai catatan, pada akhirnya saya pergi dengan solusi yang dijelaskan di sini
sumber
Dalam kasus saya, saya memiliki file pem yang berisi dua sertifikat dan kunci pribadi terenkripsi untuk digunakan dalam otentikasi SSL bersama. Jadi file pem saya terlihat seperti ini:
Inilah yang saya lakukan:
Bagi file menjadi tiga file terpisah, sehingga masing-masing berisi hanya satu entri, dimulai dengan "--- BEGIN .." dan diakhiri dengan baris "--- END ..". Mari kita asumsikan kita sekarang memiliki tiga file: cert1.pem cert2.pem dan pkey.pem
Ubah pkey.pem ke dalam format DER menggunakan openssl dan sintaks berikut:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Perhatikan, bahwa jika kunci pribadi dienkripsi, Anda perlu memberikan kata sandi (mendapatkannya dari pemasok file pem yang asli) untuk mengonversi ke format DER, openssl akan meminta kata sandi seperti ini: "masukkan pass phraze for pkey .pem: "Jika konversi berhasil, Anda akan mendapatkan file baru bernama" pkey.der "
Buat penyimpanan kunci java baru dan impor kunci pribadi dan sertifikat:
(opsional) Verifikasi konten penyimpanan kunci baru Anda:
keytool -list -keystore mykeystore -storepass password
(opsional) Uji sertifikat dan kunci pribadi Anda dari penyimpanan kunci baru Anda terhadap server SSL Anda: (Anda mungkin ingin mengaktifkan debugging sebagai opsi VM: -Djavax.net.debug = semua)
Akhirnya daftarkan sertifikat Anda dengan HttpsURLConnection jika berencana untuk menggunakannya:
sumber
HttpsURLConnection
alih-alih mencoba menulis milik Anda sendiri. (Masalah lain dengan contoh Anda adalah bahwa Anda menggunakan keystore yang sama dengan keystore dan truststore, yang tidak selalu merupakan ide yang baik ...)Menggunakan sertifikat Mari Enkripsi
Anggap Anda telah membuat sertifikat dan kunci pribadi Anda dengan Let's Encrypt di
/etc/letsencrypt/live/you.com
:1. Buat PKCS # 12 File
Ini menggabungkan sertifikat SSL Anda
fullchain.pem
dan kunci pribadi Andaprivkey.pem
ke dalam satu filepkcs.p12
,.Anda akan dimintai kata sandi untuk
pkcs.p12
.The
export
pilihan menetapkan bahwa PKCS # 12 file yang akan dibuat bukan diurai (dari manual ).2. Buat keystore Java
Jika
keystore.jks
tidak ada, itu akan dibuat berisipkcs.12
file yang dibuat di atas. Jika tidak, Anda akan mengimporpkcs.12
keystore yang ada.Instruksi ini berasal dari posting blog ini .
Berikut ini lebih banyak tentang berbagai jenis file di
/etc/letsencrypt/live/you.com/
.sumber
Berdasarkan jawaban di atas, berikut adalah cara membuat keystore baru untuk server web berbasis java Anda, dari sertifikat Comodo yang dibuat secara independen dan kunci pribadi menggunakan keytool (memerlukan JDK 1.6+)
Keluarkan perintah ini dan pada prompt kata sandi masukkan somepass - 'server.crt' adalah sertifikat server Anda dan 'server.key' adalah kunci pribadi yang Anda gunakan untuk mengeluarkan CSR:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Kemudian gunakan keytool untuk mengubah keystore p12 menjadi keystore jks:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
Kemudian impor dua sertifikat root / perantara lainnya yang Anda terima dari Comodo:
Impor COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Impor COMODORSADomainValidationSecureServerCA.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
sumber
Anda dapat menggunakan langkah-langkah ini untuk mengimpor kunci ke keystore yang ada. Instruksi digabungkan dari jawaban di utas ini dan situs lainnya. Instruksi ini bekerja untuk saya (keystore java):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(Jika perlu letakkan opsi-rantai. Menempatkan itu gagal untuk saya). Ini akan meminta kata sandi - Anda harus memberikan kata sandi yang benar jika tidak Anda akan mendapatkan kesalahan (heading error atau padding error dll).
*.jks
file run:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
(Sangat penting - jangan tinggalkan parameter deststorepass dan destkeypass.)
sumber
Jawaban sebelumnya menunjukkan dengan benar bahwa Anda hanya dapat melakukan ini dengan alat JDK standar dengan mengonversi file JKS ke format PKCS # 12 terlebih dahulu. Jika Anda tertarik, saya mengumpulkan utilitas ringkas untuk mengimpor kunci yang diturunkan dari OpenSSL ke dalam keystore berformat JKS tanpa harus mengonversi keystore menjadi PKCS # 12 terlebih dahulu: http://commandlinefanatic.com/cgi-bin/showarticle. cgi? article = art049
Anda akan menggunakan utilitas tertaut seperti ini:
(masuk CSR, dapatkan kembali localhost.cer)
sumber
Jika Anda memiliki file PEM (mis.
server.pem
) Yang berisi:maka Anda dapat mengimpor sertifikat dan kunci ke keystore JKS seperti ini:
1 ) Salin kunci pribadi dari file PEM ke file ascii (mis.
server.key
)2 ) Salin sertifikat dari file PEM ke file ascii (mis.
server.crt
)3 ) Ekspor sertifikat dan kunci ke file PKCS12:
-CAfile
opsi .winpty
ke awal perintah sehingga kata sandi ekspor dapat dimasukkan.4 ) Konversikan file PKCS12 ke keystore JKS:
srcstorepass
sandi harus sesuai dengan sandi ekspor dari langkah 3)sumber
Apa yang saya coba capai adalah menggunakan kunci pribadi dan sertifikat yang sudah disediakan untuk menandatangani pesan yang akan dikirim ke suatu tempat yang perlu memastikan bahwa pesan itu datang dari saya (tanda kunci pribadi saat kunci publik mengenkripsi).
Jadi, jika Anda sudah memiliki file .key dan file .crt?
Coba ini:
Langkah1: Konversi kunci dan cert ke file .p12
Langkah 2: Impor kunci dan buat file .jsk dengan satu perintah
Langkah 3: Di java Anda:
Jika Anda perlu menandatangani beberapa string menggunakan kunci ini lakukan hal berikut:
Langkah 1: Konversi teks yang ingin Anda enkripsi
Langkah 2: Dapatkan kunci pribadi yang disandikan base64
Referensi:
Program akhir
sumber
Buat saja keystore PKCS12, Java dapat menggunakannya langsung sekarang. Bahkan, jika Anda mendaftar keystore gaya-Jawa, keytool sendiri mengingatkan Anda pada kenyataan bahwa PKCS12 sekarang merupakan format yang disukai.
Anda seharusnya menerima ketiga file (server.crt, server.key, ca.crt) dari penyedia sertifikat Anda. Saya tidak yakin apa arti "-caname root" sebenarnya, tetapi tampaknya harus ditentukan seperti itu.
Dalam kode Java, pastikan untuk menentukan jenis keystore yang tepat.
Saya mendapatkan sertifikat SSL yang dikeluarkan comodo.com saya bekerja dengan baik di NanoHTTPD dengan cara ini.
sumber
dalam kasus Kurva Elliptic dan jawab pertanyaan impor sertifikat x509 dan kunci pribadi yang ada di Java keystore , Anda mungkin ingin melihat juga utas ini. Bagaimana membaca EC Private key di java yang dalam format file .pem
sumber