Bagaimana cara mengonversi file .pfx ke keystore dengan kunci pribadi?

107

Saya perlu menandatangani aplikasi Android ( .apk).
Saya memiliki .pfxfile. Saya dikonversi ke .cerfile yang melalui Internet Explorer dan kemudian dikonversi .cerke .keystoremenggunakan keytool. Lalu saya mencoba masuk .apkdengan jarsigner tetapi dikatakan bahwa .keystore tidak memuat kunci pribadi.

Apa yang saya lakukan salah?

Ola
sumber
Ini dapat berguna: bagaimana saya dapat menemukan dan menjalankan keytool untuk Windows stackoverflow.com/questions/5488339/…
Peter Barbanyaga

Jawaban:

259

Menggunakan JDK 1.6 atau lebih baru

Telah ditunjukkan oleh Justin dalam komentar di bawah bahwa keytool saja yang mampu melakukan ini menggunakan perintah berikut (meskipun hanya di JDK 1.6 dan yang lebih baru):

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

Menggunakan JDK 1.5 atau lebih rendah

OpenSSL dapat melakukan semuanya. Jawaban di JGuru ini adalah metode terbaik yang saya temukan sejauh ini.

Pertama, pastikan Anda telah menginstal OpenSSL . Banyak sistem operasi sudah menginstalnya seperti yang saya temukan dengan Mac OS X.

Dua perintah berikut mengonversi file pfx ke format yang dapat dibuka sebagai penyimpanan kunci Java PKCS12:

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

Perhatikan bahwa nama yang diberikan pada perintah kedua adalah alias dari kunci Anda di penyimpanan kunci baru.

Anda dapat memverifikasi konten penyimpanan kunci menggunakan utilitas Java keytool dengan perintah berikut:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

Terakhir, jika perlu, Anda dapat mengubahnya menjadi penyimpanan kunci JKS dengan mengimpor penyimpanan kunci yang dibuat di atas menjadi penyimpanan kunci baru:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
MikeD
sumber
28
tidak perlu untuk ketiga langkah tersebut, cukup jalankan: keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
JustinMorris
Saya pikir versi keytool yang lebih lama tidak akan membiarkan Anda melakukannya. Saya ingat bahwa 8 tahun yang lalu saya harus menjalankan openssl tetapi sekarang dengan keytool di Oracle JDK 6 dan 7, itu berfungsi seperti pesona, seperti yang dikatakan Justin.
David Brossard
2
Harap dicatat bahwa jawaban itu saya berikan dalam bentuk yang lebih sederhana dengan lebih detail setahun sebelum Justin.
gjpc
@gjpc Tercatat. Jawaban Anda sangat lengkap dan layak mendapatkan banyak suara :)
MikeD
Ini benar-benar jawaban yang bagus dan menyelamatkan saya setelah penelitian selama berhari-hari. Jawaban ini benar-benar membutuhkan lebih banyak suara positif. Terima kasih Pak.
Mythul
22

jarsigner dapat menggunakan file pfx Anda sebagai keystore untuk menandatangani jar Anda. Pastikan file pfx Anda memiliki kunci privat dan rantai sertifikat saat Anda mengekspornya. Tidak perlu mengonversi ke format lain. Triknya adalah mendapatkan Alias dari file pfx Anda:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

Setelah Anda memiliki nama lain, penandatanganannya mudah

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

Dua perintah di atas akan meminta Anda memasukkan kata sandi yang Anda tentukan di pfx export. Jika Anda ingin memiliki password Anda nongkrong di gunakan teks yang -storepass saklar sebelum -keystore saklar

Setelah ditandatangani, kagumi pekerjaan Anda:

jarsigner.exe -verify -verbose -certs  yourjarfile
gjpc
sumber
1
1 karena tidak harus mengonversi file keystore (saya sudah memilikinya dalam format yang cukup!)
Trejkaz
22

Saya menemukan halaman ini yang memberi tahu Anda cara mengimpor PFX ke JKS (Java Key Store):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME
kaptan
sumber
3
Ini harus menjadi jawaban yang lengkap!
JustAGuy
Saya mencari jawaban seperti ini - dengan nama alias
pengguna3437460
Saya punya satu masalah, pfx tidak memiliki kata sandi, begitu -srcstorepassjuga masalah saya. PFX ini dibuat oleh klien LetsEncrypt untuk Windows
FiruzzZ
2

File PFX Anda harus berisi kunci pribadi di dalamnya. Ekspor kunci pribadi dan sertifikat langsung dari file PFX Anda (mis. Menggunakan OpenSSL) dan impor ke keystore Java Anda.

Edit

Informasi lebih lanjut:

  • Unduh OpenSSL untuk Windows di sini .
  • Ekspor kunci pribadi: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • Ekspor sertifikat: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Impor kunci pribadi dan sertifikat ke keystore Java menggunakan keytool.
Bernard
sumber
bisakah Anda memberi tahu saya bagaimana cara mengimpor key.pem dan cert.pem menggunakan keytool?
Sad Al Abdullah
1
Tambahan kecil: Anda harus menambahkan -node pada akhirnya saat mengekspor private ky
morgan_il
2

Justin (di atas) akurat. Namun, perlu diingat bahwa tergantung pada siapa Anda mendapatkan sertifikat (CA perantara, CA root terlibat atau tidak) atau bagaimana pfx dibuat / diekspor, terkadang rantai sertifikat bisa hilang. Setelah Impor, Anda akan memiliki sertifikat jenis PrivateKeyEntry, tetapi dengan panjang rantai 1.

Untuk mengatasinya, ada beberapa opsi. Opsi yang lebih mudah dalam pikiran saya adalah mengimpor dan mengekspor file pfx di IE (memilih opsi Menyertakan semua sertifikat dalam rantai). Proses impor dan ekspor sertifikat di IE harus sangat mudah dan didokumentasikan dengan baik di tempat lain.

Setelah diekspor, impor keystore seperti yang ditunjukkan Justin di atas. Sekarang, Anda akan memiliki keystore dengan sertifikat jenis PrivateKeyEntry dan dengan panjang rantai sertifikat lebih dari 1.

Klien layanan Web berbasis .Net tertentu mengalami error (tidak dapat membangun hubungan kepercayaan), jika Anda tidak melakukan hal di atas.

TechIsFun
sumber
Ini sepertinya tidak berfungsi di IE11. Itu gagal untuk memasukkan rantai sertifikat meskipun saya menyuruhnya. Saya tahu ini berhasil di masa lalu.
Brian Knoblauch
0

Jika Anda bekerja dengan JDK 1.5 atau di bawahnya, utilitas keytool tidak akan memiliki -importkeystoreopsi (lihat dokumentasi keytool JDK 1.5 ) dan solusi dari MikeD hanya akan tersedia dengan mentransfer .pfxpada mesin dengan JDK yang lebih baru (1.6 atau yang lebih baru).

Opsi lain di JDK 1.5 atau lebih rendah (jika Anda memiliki produk Oracle WebLogic), adalah mengikuti petunjuk dari dokumen Oracle ini: Menggunakan Format Sertifikat PFX dan PEM dengan Keystore . Ini menjelaskan konversi ke .pemformat, cara mengekstrak informasi sertifikat dari format tekstual ini, dan mengimpornya ke dalam .jksformat dengan java utils.ImportPrivateKeyutilitas (ini adalah utilitas yang disertakan dengan produk WebLogic).

Mariano Paniga
sumber