.Pfx dosyasını özel anahtarla anahtar deposuna nasıl dönüştürebilirim?


107

Android uygulamasını ( .apk) imzalamam gerekiyor .
Dosyam var .pfx. Ben onu dönüştürülür .cerInternet Explorer üzerinden dosya ve daha sonra dönüştürülen .ceriçin .keystorekeytool kullanarak. Sonra .apkjarsigner ile imzalamayı denedim ama .keystore'un özel bir anahtar içermediğini söylüyor.

Neyi yanlış yapıyorum?


Yanıtlar:


259

JDK 1.6 veya üzerini kullanma

Aşağıdaki yorumlarda Justin tarafından, keytool'un aşağıdaki komutu kullanarak tek başına bunu yapabildiğini belirtmiştir (sadece JDK 1.6 ve sonrasında):

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

JDK 1.5 veya altını kullanma

OpenSSL hepsini yapabilir. JGuru'daki bu cevap, şimdiye kadar bulduğum en iyi yöntem.

Öncelikle OpenSSL'nin kurulu olduğundan emin olun . Mac OS X'te bulduğum gibi birçok işletim sisteminde zaten yüklü durumda.

Aşağıdaki iki komut, pfx dosyasını Java PKCS12 anahtar deposu olarak açılabilen bir biçime dönüştürür:

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

İkinci komutta verilen adın, yeni anahtar deposundaki anahtarınızın diğer adı olduğuna dikkat edin.

Java keytool yardımcı programını kullanarak aşağıdaki komutla anahtar deposunun içeriğini doğrulayabilirsiniz:

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

Son olarak, gerekirse, yukarıda oluşturulan anahtar deposunu yeni bir anahtar deposuna aktararak bunu bir JKS anahtar deposuna dönüştürebilirsiniz:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

28
üç adıma da gerek yoktur, sadece şunu çalıştırın: keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
JustinMorris

Keytool'un eski sürümlerinin bunu yapmanıza izin vermeyeceğini düşünüyorum. 8 yıl önce openssl'yi çalıştırmam gerektiğini hatırlıyorum ama şimdi Oracle JDK 6 ve 7'deki keytool ile, tıpkı Justin'in dediği gibi, bir cazibe gibi çalışıyor.
David Brossard

2
Bu cevabı Justin'den bir yıl önce daha ayrıntılı olarak daha basit bir biçimde verdiğimi lütfen unutmayın.
gjpc

@gjpc Not edildi. Cevabınız çok eksiksiz ve çok sayıda oyu hak ediyor :)
MikeD

Bu gerçekten harika bir cevap ve günler süren araştırmalardan sonra beni kurtardı. Bu cevap gerçekten çok daha fazla oyu hak ediyor. Teşekkürler bayım.
Mythul

22

jarsigner, pfx dosyanızı jar'ınızı imzalamak için anahtar deposu olarak kullanabilir. Dışa aktarırken pfx dosyanızın özel anahtara ve sertifika zincirine sahip olduğundan emin olun. Diğer formatlara dönüştürmeye gerek yoktur. İşin püf noktası , pfx dosyanızın Takma Adını elde etmektir :

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

Takma adınızı aldıktan sonra imzalamak kolaydır

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

Yukarıdaki iki komut, pfx dışa aktarmada belirttiğiniz parolayı soracaktır. Eğer sahip olmak istiyorsanız şifreniz düz metin kullanımda takılmak -storepass önce anahtarı -keystore anahtarı

İmzalandıktan sonra çalışmalarınıza hayran kalın:

jarsigner.exe -verify -verbose -certs  yourjarfile

1
Anahtar deposu dosyasını dönüştürmek zorunda olmadığı için +1 (zaten yeterli formatta
sahibim

22

Bir PFX'i JKS'ye (Java Anahtar Deposu) nasıl aktaracağınızı anlatan bu sayfayı buldum :

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

3
Bu tam cevap olmalı!
JustAGuy

Bunun gibi bir cevap arıyordum - takma adla
user3437460

Bir sorunum var, pfx'in şifresi yok -srcstorepass, benim sorunum da. Bu PFX, Windows için bir LetsEncrypt istemcisi tarafından oluşturulmuştur
FiruzzZ

2

PFX dosyanız, içindeki özel anahtarı içermelidir. Özel anahtarı ve sertifikayı doğrudan PFX dosyanızdan (ör. OpenSSL kullanarak) dışa aktarın ve bunları Java anahtar deponuza aktarın.

Düzenle

Daha fazla bilgi:

  • Windows için OpenSSL'yi buradan indirin .
  • Özel anahtarı dışa aktar: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • İhracat sertifikası: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Özel anahtarı ve sertifikayı kullanarak Java anahtar deposuna aktarın keytool.

Keytool kullanarak key.pem ve cert.pem'i nasıl içe aktarabileceğimi söyler misiniz?
Sad Al Abdullah

1
Küçük ekleme: özel
ky'yi

2

Justin (yukarıda) doğru. Bununla birlikte, sertifikayı kimden aldığınıza (ara CA, kök CA dahil olup olmadığına) veya pfx'in nasıl oluşturulduğuna / dışa aktarıldığına bağlı olarak bazen sertifika zincirinin eksik olabileceğini unutmayın. Aldıktan sonra, PrivateKeyEntry türünde bir sertifikanız olur, ancak zincir uzunluğu 1'dir.

Bunu düzeltmek için birkaç seçenek var. Aklımda daha kolay olan seçenek, pfx dosyasını IE'de içe ve dışa aktarmaktır (zincirdeki tüm sertifikaları dahil etme seçeneğini seçerek). IE'deki sertifikaların ithalat ve ihracat süreci çok kolay olmalı ve başka bir yerde iyi bir şekilde belgelendirilmelidir.

Dışa aktarıldıktan sonra, anahtar deposunu Justin'in yukarıda işaret ettiği gibi içe aktarın. Artık, PrivateKeyEntry türünde sertifikaya ve 1'den fazla sertifika zinciri uzunluğuna sahip bir anahtar deponuz olur.

Yukarıdakileri yapmazsanız, bazı .Net tabanlı Web hizmeti istemcileri hata verir (güven ilişkisi kuramaz).


Bu, IE11'de işe yaramıyor gibi görünüyor. Ben söylememe rağmen sertifika zincirini dahil edemiyor. Bunun geçmişte işe yaradığını biliyorum.
Brian Knoblauch

0

JDK 1.5 veya altı ile çalışıyorsanız, keytool yardımcı programı -importkeystoreseçeneği bulunmayacaktır ( JDK 1.5 keytool belgelerine bakın ) ve MikeD tarafından sağlanan çözüm, yalnızca .pfxdaha yeni bir JDK (1.6 veya üstü) olan bir makineye aktarıldığında kullanılabilir .

JDK 1.5 veya altındaki başka bir seçenek (Oracle WebLogic ürününüz varsa), bu Oracle belgesindeki talimatları izlemektir: Anahtar Depoları ile PFX ve PEM Sertifika Biçimlerini Kullanma . İçine dönüşümünü anlatmaktadır .pemnasıl bu metinsel biçiminden sertifikaları bilgi ayıklamak ve içe şekilde biçim, .jksile formata java utils.ImportPrivateKeykuruluşu (bu WebLogic ürünle birlikte gelen bir yardımcı programdır).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.