it-swarm.dev

استيراد زوج المفتاح الخاص/الشهادة العامة في Java KeyStore

لقد استخدمت الخطوات التالية لإنشاء لوحة مفاتيح Java جديدة مع زوج من المفتاح الخاص/العام ليتم استخدامه من قبل خادم Java (داخلي) مع TLS. يرجى ملاحظة أن الشهادة موقعة ذاتيا:

1) إنشاء مفتاح مع AES256

openssl genrsa -aes256 -out server.key 1024

2) توليد طلب سيرت ل CA

openssl req -x509 -sha256 -new -key server.key -out server.csr

3) توليد الذاتي وقعت وقت انتهاء الصلاحية 10 سنوات

openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt

4) استخدام برنامج مثل KeyStoreExplorer لاستيراد الزوج (مفتاح خاص وشهادة selfsigned) في JKS جديد

يعمل هذا ولكنني أرغب في تنفيذ الخطوة الأخيرة دون استخدام واجهة المستخدم الرسومية.

أعرف كيفية استيراد الشهادة الموقعة ذاتيا فقط:

// create the keystore and import the public key. THIS WILL NOT IMPORT THE PRIVATE KEY SO THE KEYSTORE CAN'T BE USED ON THE SERVER TO MAKE THE TLS CONNECTION
/usr/Java/jdk1.6.0_45/bin/keytool -import -alias myservercert -file server.crt -keystore mykeystore.jks

لذا فإن السؤال هو: كيف يمكنني إنشاء Java KeyStore واستيراد كل من الشهادة باستخدام المفتاح العمومي والمفتاح الخاص دون استخدام واجهة المستخدم الرسومية؟

71
kingston

باستخدام المفتاح الخاص والشهادة العامة ، تحتاج إلى إنشاء مفتاح PKCS12 أولاً ، ثم تحويله إلى JKS.

# Create PKCS12 keystore from private key and public certificate.
openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12

# Convert PKCS12 keystore into a JKS keystore
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert

للتحقق من محتويات JKS ، يمكنك استخدام هذا الأمر:

keytool -list -v -keystore mykeystore.jks

إذا لم تكن هذه شهادة موقعة ذاتيًا ، فقد ترغب في اتباع هذه الخطوة مع استيراد سلسلة الشهادة المؤدية إلى شهادة المرجع المصدق الموثوق بها.

169
gtrig

يحتاج ملف المفاتيح إلى ملف keystore. تحتاج الفئة KeyStore إلى FileInputStream. ولكن إذا قمت بتوفير قيمة خالية (بدلاً من FileInputStream) ، فسيتم تحميل مفتاح ضغط فارغ . بمجرد إنشاء لوحة مفاتيح ، يمكنك التحقق من سلامتها باستخدام keytool.

يؤدي الرمز التالي إلى إنشاء مفتاح ضغط فارغ بكلمة مرور فارغة

  KeyStore ks2 = KeyStore.getInstance("jks");
  ks2.load(null,"".toCharArray());
  FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore");
  ks2.store(out, "".toCharArray());

بمجرد حصولك على لوحة المفاتيح ، ستكون عملية استيراد الشهادة سهلة للغاية. الخروج هذا الرابط للحصول على نموذج التعليمات البرمجية.

0
Santosh