هل يمكن لمخزن مفتاح Java استيراد زوج مفتاح تم إنشاؤه بواسطة OpenSSL؟

StackOverflow https://stackoverflow.com/questions/2685512

  •  30-09-2019
  •  | 
  •  

سؤال

أقوم بإنشاء مفتاح شهادة مع OpenSSL. ها هو قيادتي:

Openssl genrsa -des3 -out enc_key.pem 1024

أقوم بتصدير ملف CER ، ثم مع java keytool i استيراد إلى Java Keystore (JKS).

keystore تبدو جيدة. يمكنني تحميل keystore من تطبيق Java الخاص بي.

المشكلة هي عندما يتصل العميل بالخادم (في هذه الحالة هو خادم FTP ، وليس خادم الويب ، وأنا أستخدم Apache Mina) ، حدث الاستثناء:

javax.net.ssl.sslhandshakeException: فشل مصافحة SSL. at org.apache.mina.filter.ssl.sslfilter.messagereceived (sslfilter.java:433) at org.apache.core.filterchain.defaultiofilterchain.callnextmessagereceived (defaultiofilterch .filterchain.defaultiofilterchain.access $ 5 (defaultiofilterchain.java:429)

...

سبب: javax.net.ssl.sslhandshakeException: لا توجد أجنحة مشفرة مشتركة في com.sun.net.ssl.internal.ssl.handshaker.checkthrown (مصدر غير معروف) في com.sun.net.ssl.internal.ssl.sslengineimplpl. .CheckTaskthrown (مصدر غير معروف) في com.sun.net.ssl.internal.ssl.sslengineimpl.writeApprecord (مصدر غير معروف) في com.sun.net.ssl.internal.ssl.sslengpl.wrap (مصدر غير معروف) في javax.net .ssl.sslengine.wrap (مصدر غير معروف)

...

بسبب: javax.net.ssl.sslhandshakeException: لا توجد أجنحة مشفرة مشتركة في com.sun.net.ssl.internal.ssl.alerts.getsspection (مصدر غير معروف) في com.sun.net.ssl.internal.ssl.sslengineimplpl. .

هناك بعض الأشياء التي أريد أن أسألها:

  1. ما هو الشفرات التي أقوم بإنشائها مع OpenSSL؟ كيف يمكننا أن نعرف؟ ربما بواسطة سطر الأوامر OpenSSL XXX؟
  2. أذهب إلى http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/jsserefguide.html#appa. وقد وضعت SSL_RSA_XXX لتمكين أجنحة التشفير ، لكنني ما زلت لا أستطيع العمل (لقد وضعت SSL_RSA لأنها تستخدم SSL SSL ، و Genrsa ، فقط رأيي Genrsa يولد RSA). هل هذا صحيح؟
  3. أي شخص يعرف الحل؟
  4. أو ، يعرف أي شخص كيفية إنشاء keystore القياسي من سطر أوامر OpenSSL حتى يمكن استخدامه في تطبيق Java (خارج المسار مع الشفرات). لأنه في الوقت الحالي ، يمكنني إنشاء الشهادة من OpenSSL وتصدير keystore Java ، لكنني لا أعرف ما هو الشفرات التي استخدمتها وكيف أستخدمها في تطبيق Java. ملاحظة: يمكنني التشغيل إذا تم إنشاء Keystore مباشرة من Java. في الوقت الحالي ، تكمن المشكلة في ما إذا كانت keystore التي تم إنشاؤها بواسطة Java KeyTool من شهادة مثل OpenSSL (وغيرها ربما).

سيكون موضع تقدير أي مساعدة! شكرًا

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

المحلول

لماذا تستخدم OpenSSL لإنشاء keypair؟ لماذا لا تستخدم فقط keytool?

ال genrsa الأداة تولد فقط مفتاح خاص. كيف تقوم بإنشاء شهادة مقابلة؟ كيف تقوم باستيراد المفتاح الخاص إلى Java Keystore الخاص بك؟ (أسأل ، لأن keytool لا يمكن استيراد مفتاح خاص إلا من متجر مفاتيح موجود ، وفقط من Java 6 فصاعدًا).

أظن أن مشكلتك هي أن متجرك الرئيسي لا يحتوي على إدخال مفتاح (مفتاح خاص و شهادة المقابلة). عندما تدرج محتويات keystore مع keytool, ، كم عدد الإدخالات الموجودة؟ هل هي إدخالات رئيسية أم إدخالات موثوقة؟


يحتاج الخادم إلى الوصول إلى المفتاح الخاص من أجل المصادقة على نفسه. لاستيراد مفتاح خاص ، استخدم جافا 6  المحسن keytool.

بعد إنشاء المفتاح والشهادة مع OpenSSL ، استخدم OpenSSL لإنشاء متجر مفتاح PKCS #12:

openssl pkcs12 -export -in cert.pem -inkey key.pem > server.p12

ثم تحويل هذا المتجر إلى متجر مفتاح Java:

keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

استخدم الآن server.jks في خادم SSL الخاص بك ، والذي يحتوي على الشهادة و المفتاح الخاص.

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