سؤال

أنا أحاول تحويل من جافا keystore الملف إلى ملف بيم باستخدام keytool و openssl applicactions.ولكن أنا لا يمكن العثور على وسيلة جيدة للقيام التحويل.أي أفكار ؟

بدلا من تحويل keystore مباشرة إلى بيم حاولت إنشاء PKCS12 الملف أولا ثم تحويل ذات الصلة بيم الملف Keystore.ولكن أنا لا يمكن إنشاء اتصال باستخدام لهم.(لاحظ أن أحتاج بيم ملف Keystore الملف لتنفيذ اتصال آمن.لا يوجد أي قيود مثل "تبدأ من جافا keystore الملف".:) لذلك بدءا من صيغ أخرى مقبولة مع حالتي)

ولكن مباشرة طريقة التحويل من jks إلى بيم هو الأفضل.

هل كانت مفيدة؟

المحلول

انها واضحة جدا ، باستخدام jdk6 على الأقل...

bash$ keytool -keystore foo.jks -genkeypair -alias foo \
        -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
Enter keystore password:  
Re-enter new password: 
Enter key password for 
        (RETURN if same as keystore password):  
bash$ keytool -keystore foo.jks -exportcert -alias foo | \
       openssl x509 -inform der -text
Enter keystore password:  asdasd
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1237334757 (0x49c03ae5)
        Signature Algorithm: dsaWithSHA1
        Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Validity
            Not Before: Mar 18 00:05:57 2009 GMT
            Not After : Jun 16 00:05:57 2009 GMT
        Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Subject Public Key Info:
            Public Key Algorithm: dsaEncryption
            DSA Public Key:
                pub: 
                    00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
                    7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
 

bash$ keytool -importkeystore -srckeystore foo.jks \
       -destkeystore foo.p12 \
       -srcstoretype jks \
       -deststoretype pkcs12
Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
Entry for alias foo successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

bash$ openssl pkcs12 -in foo.p12 -out foo.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

bash$ openssl x509 -text -in foo.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1237334757 (0x49c03ae5)
        Signature Algorithm: dsaWithSHA1
        Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Validity
            Not Before: Mar 18 00:05:57 2009 GMT
            Not After : Jun 16 00:05:57 2009 GMT
        Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Subject Public Key Info:
            Public Key Algorithm: dsaEncryption
            DSA Public Key:
                pub: 
                    00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
                    7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
 

bash$ openssl dsa -text -in foo.pem
read DSA key
Enter PEM pass phrase:
Private-Key: (1024 bit)
priv:
    00:8f:b1:af:55:63:92:7c:d2:0f:e6:f3:a2:f5:ff:
    1a:7a:fe:8c:39:dd
pub: 
    00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
    7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:



كنت في نهاية المطاف مع:

  • فو.jks - keystore في جافا الشكل.
  • فو.p12 - keystore في PKCS#12 الشكل.
  • فو.pem - جميع مفاتيح موتس من keystore في PEM format.

(هذا آخر ملف يمكن تقسيم إلى مفاتيح وشهادات إذا كنت مثل.)


ملخص الأمر إلى إنشاء JKS keystore:

keytool -keystore foo.jks -genkeypair -alias foo \
    -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'

ملخص الأمر إلى تحويل JKS keystore في PKCS#12 keystore ، ثم إلى بيم الملف:

keytool -importkeystore -srckeystore foo.jks \
   -destkeystore foo.p12 \
   -srcstoretype jks \
   -deststoretype pkcs12

openssl pkcs12 -in foo.p12 -out foo.pem

إذا كان لديك أكثر من شهادة واحدة في JKS keystore و تريد فقط تصدير الشهادة الرئيسية المرتبطة مع واحدة من الأسماء المستعارة ، يمكنك استخدام التالية الاختلاف:

keytool -importkeystore -srckeystore foo.jks \
   -destkeystore foo.p12 \
   -srcalias foo \
   -srcstoretype jks \
   -deststoretype pkcs12

openssl pkcs12 -in foo.p12 -out foo.pem

ملخص الأمر - مقارنة JKS keystore إلى بيم الملف:

keytool -keystore foo.jks -exportcert -alias foo | \
   openssl x509 -inform der -text

openssl x509 -text -in foo.pem

openssl dsa -text -in foo.pem

نصائح أخرى

وظللت الحصول على أخطاء من openssl عند استخدام الأمر StoBor ل:

MAC verified OK
Error outputting keys and certificates
139940235364168:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:535:
139940235364168:error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error:p12_decr.c:97:
139940235364168:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:123:

لسبب ما، لن يؤدي إلا إلى هذا النمط من القيادة تعمل لملف JKS بلدي

keytool -importkeystore -srckeystore foo.jks \
   -destkeystore foo.p12 \
   -srcstoretype jks \
   -srcalias mykey \
   -deststoretype pkcs12 \
   -destkeypass DUMMY123

ومفتاح ذاهبة destkeypass، فإن قيمة الوسيطة لا يهم.

وسوف الأمر keytool لا يسمح لك تصدير المفتاح الخاص من مخزن المفاتيح. لديك لكتابة بعض الرموز جافا للقيام بذلك. فتح مخزن المفاتيح، احصل على المفتاح الذي تحتاجه، وحفظه إلى ملف في PKCS # 8 الشكل. حفظ الشهادة المرتبطة أيضا.

KeyStore ks = KeyStore.getInstance("jks");
/* Load the key store. */
...
char[] password = ...;
/* Save the private key. */
FileOutputStream kos = new FileOutputStream("tmpkey.der");
Key pvt = ks.getKey("your_alias", password);
kos.write(pvt.getEncoded());
kos.flush();
kos.close();
/* Save the certificate. */
FileOutputStream cos = new FileOutputStream("tmpcert.der");
Certificate pub = ks.getCertificate("your_alias");
cos.write(pub.getEncoded());
cos.flush();
cos.close();

استخدم المرافق بينسل لتحويل هذه الملفات (والتي هي في شكل ثنائي) إلى تنسيق PEM.

openssl pkcs8 -inform der -nocrypt < tmpkey.der > tmpkey.pem
openssl x509 -inform der < tmpcert.der > tmpcert.pem

والتحويل المباشر من JKS إلى ملف بيم باستخدام keytool

keytool -exportcert -alias selfsigned -keypass password -keystore test-user.jks -rfc -file test-user.pem

والمبسطة الإرشادات لتحويل ملف JKS إلى PEM وشكل مفتاح (بامتداد crt ويتضمن المنتج):

keytool -importkeystore -srckeystore <Source-Java-Key-Store-File> -destkeystore <Destination-Pkcs12-File> -srcstoretype jks -deststoretype pkcs12 -destkeypass <Destination-Key-Password>

openssl pkcs12 -in <Destination-Pkcs12-File> -out <Destination-Pem-File>

openssl x509 -outform der -in <Destination-Pem-File> -out <Destination-Crt-File>

openssl rsa -in <Destination-Pem-File> -out <Destination-Key-File>

ولقد وجدت الحل مثيرة جدا للاهتمام:

http://www.swview.org/node/191

وبعد ذلك، وأنا تقسيم الزوج المفتاح العام / الخاص إلى ملفين private.key publi.pem ويعمل!

حسنا، بينسل ينبغي أن نفعل ذلك بسهولة من ملف رقم 12:

openssl pkcs12 -in pkcs-12-certificate-file -out pem-certificate-file
openssl pkcs12 -in pkcs-12-certificate-and-key-file -out pem-certificate-and-key-file

وربما أكثر التفاصيل على ما هو الخطأ / الفشل؟

تحويل JKS KeyStore واحد بيم ملف يمكن بسهولة أن يتم ذلك باستخدام الأمر التالي:

keytool -list -rfc -keystore "myKeystore.jks" | sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d" >> "myKeystore.pem"

التفسير:

  1. keytool -list -rfc -keystore "myKeystore.jks" قوائم كل شيء في 'myKeyStore.jks' KeyStore في PEM format.ومع ذلك ، فإنه يطبع أيضا معلومات إضافية.
  2. | sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d" بتصفية كل ما لا تحتاج.نحن مع اليسار فقط PEMs من كل شيء في KeyStore.
  3. >> "myKeystore.pem" كتابة PEMs إلى الملف 'myKeyStore.بيم'.

في حال لم يكن لديك بينسل تثبيت كنت تبحث عن حل سريع ، هناك برنامج يسمى portcle وهو أمر مفيد جدا و صغير لتحميل.

العيب هو أن لا يوجد سطر الأوامر بقدر ما أعرف.ولكن من واجهة المستخدم الرسومية ، بل هو مستقيم جدا إلى الأمام إلى تصدير بيم المفتاح الخاص:

  1. تفتح لك JKS مفتاح المخزن
  2. انقر بزر الماوس الأيمن فوق المفتاح الخاص واختر تصدير
  3. حدد المفتاح الخاص و شهادات PEM format

    Export PEM private key from JKS with Portcle

وحاول تخزين المفاتيح اكسبلورر http://keystore-explorer.org/

وتخزين المفاتيح إكسبلورر هو مفتوح استبدال واجهة المستخدم الرسومية المصدر لسطر الأوامر جافا المرافق keytool وjarsigner. وهو يفعل بينسل / pkcs12 كذلك.

أولا إنشاء keystore الملف

C:\Program Files\Android\Android Studio\jre\bin>keytool -keystore androidkey.jks -genkeypair مستعار androidkey

أدخل كلمة سر مخزن المفاتيح:
إعادة إدخال كلمة السر الجديدة:
ما هو الاسم واللقب ؟ غير معروف: الاسم الاول الاسم الاخير
ما هو اسم الوحدة التنظيمية?غير معروف: التنمية النقالة
ما هو اسم المؤسسة الخاصة بك ؟ غير معروف: اسم الشركة الخاصة بك
ما هو اسم المدينة أو المنطقة ؟ ما هو اسم الدولة أو المقاطعة ؟
ما هو على حرفين البلد رمز هذه الوحدة ؟ غير معروف:في //اضغط enter

الآن سوف يطلب تأكيد

هو CN=الاسم الأول اسم العائلة, OU=المحمول التنمية, O=اسم الشركة الخاصة بك ، L=CityName, ST=StateName ، C=في صحيح ؟ [أي]: نعم

أدخل مفتاح المرور (عودة إذا نفس keystore كلمة المرور):اضغط enter إذا كنت تريد نفس كلمة المرور

الرئيسية قد ولدت الآن يمكنك ببساطة الحصول على pem الملف باستخدام الأمر التالي

C:\Program Files\Android\Android Studio\jre\bin>keytool -تصدير -rfc -الاسم المستعار androidkey ملف android_certificate.pem -keystore androidkey.jks
أدخل كلمة سر مخزن المفاتيح:
شهادة المخزنة في الملف

أولا تفريغ keystore من JKS إلى PKCS12

1. keytool -importkeystore -srckeystore ~/.الروبوت/debug.keystore -destkeystore المتوسطة.p12 -srcstoretype JKS -deststoretype PKCS12

تفريغ الجديد pkcs12 الملف إلى pem

  1. بينسل pkcs12 -في المتوسط.p12 -العقد-الخروج المتوسطة.rsa.pem

يجب أن يكون كل شهادة و مفتاح خاص في pem format.انقسام لهم.وضع الجزء بين "تبدأ الشهادة" و "نهاية الشهادة" في سيرت.x509.pem وضع الجزء بين "تبدأ مفتاح RSA الخاص" و "نهاية RSA المفتاح الخاص" في القطاع الخاص.rsa.pem تحويل المفتاح الخاص في pk8 الشكل كما هو متوقع من قبل signapk

3. بينسل pkcs8 -topk8 -outform دير في القطاع الخاص.rsa.pem -اعلام بيم المغادرة الخاص.pk8 -nocrypt

تحويل جافا Keystore في PEM Format

أدق إجابة من كل بد أن هذا غير ممكن.

جافا keystore هو مجرد منشأة تخزين مفاتيح التشفير و شهادات في حين بيم هو تنسيق ملف شهادات X. 509 فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top