سؤال

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

-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----

لا يمكن استيراد هذا الملف شهادة في برنامج Internet Explorer (بدون الحاجة إلى إدخال كلمة السر!) و استخدامها لمصادقة مع خدمة ويب.

كنت قادرا على استيراد الشهادة إلى مخزن المفاتيح أولا تجريد السطر الأول والأخير, تحويل أسطر unix و تشغيل base64-فك.الملف الناتج يمكن استيرادها إلى keystore (باستخدام keytool الأوامر).عندما قائمة الإدخالات في keystore هذا الدخول هو من نوع trustedCertEntry.لأن هذا دخول نوع (?) أنا لا يمكن استخدام هذه شهادة المصادقة مع خدمة ويب.أنا بدأت أعتقد أن قدمت الشهادة العامة الشهادة التي تستخدم مصادقة...

الحل وجدت أن استيراد الشهادة في أي والتصدير أنها .pfx الملف.هذا الملف يمكن تحميله كما keystore و يمكن استخدامها لمصادقة مع خدمة ويب.ولكن أنا لا يمكن أن نتوقع موكلي لأداء هذه الخطوات في كل مرة يحصلون على شهادة جديدة.لذلك أود أن تحميل .cer الملف مباشرة في جافا.أي أفكار ؟

معلومات إضافية:الشركة وراء خدمة ويب قال لي أنه يجب أن تكون الشهادة المطلوبة (باستخدام IE & الموقع) من جهاز الكمبيوتر المستخدم التي من شأنها أن استيراد الشهادة في وقت لاحق.

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

المحلول

  • إذا كنت ترغب في المصادقة ، فأنت بحاجة إلى المفتاح الخاص - لا يوجد خيار آخر.
  • الشهادة هي مفتاح عام مع خصائص إضافية (مثل اسم الشركة ، البلد ، ...) التي تم توقيعها من قبل بعض سلطة الشهادات التي تضمن أن العقارات المرفقة صحيحة.
  • .CER الملفات هي شهادات وليس لديها المفتاح الخاص. يتم تزويد المفتاح الخاص بـ .PFX keystore ملف بشكل طبيعي. إذا كنت مصادقة حقًا لأنك قد قمت بالفعل باستيراد المفتاح الخاص.
  • يمكنك عادة استيراد .CER شهادات دون أي مشاكل مع

    keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias" 
    

نصائح أخرى

الاستيراد .cer تم تنزيل ملف الشهادة من المتصفح (افتح عنوان URL وحفر للحصول على التفاصيل) إلى cacerts Keystore في java_home\jre\lib\security عملت بالنسبة لي ، بدلاً من محاولة توليد واستخدام keystore الخاص بي.

  1. إذهب إلى ....... الخاص بك java_home\jre\lib\security
  2. (شبابيك) فتح سطر أوامر المسؤول هناك باستخدام cmd و كنترول+تحول+أدخل
  3. قم بتشغيل keytool لاستيراد الشهادة:
    • (يحل محل yourAliasName و path\to\certificate.cer على التوالى)

 ..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cer

وبهذه الطريقة ، لا يتعين عليك تحديد أي خيارات JVM إضافية ويجب التعرف على الشهادة من قبل JRE.

فيما يلي الرمز الذي كنت أستخدمه لاستيراد ملفات .CR بشكل برمجي إلى مفتاح جديد.

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
//VERY IMPORTANT.  SOME OF THESE EXIST IN MORE THAN ONE PACKAGE!
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

//Put everything after here in your function.
KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);//Make an empty store
InputStream fis = /* insert your file path here */;
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    trustStore.setCertificateEntry("fiddler"+bis.available(), cert);
}

يجب ألا تضطر إلى إجراء أي تغييرات على الشهادة. هل أنت متأكد من أنك تقوم بتشغيل أمر الاستيراد الصحيح؟

ما يلي يعمل بالنسبة لي:

keytool -import -alias joe -file mycert.cer -keystore mycerts -storepass changeit

حيث يحتوي mycert.cer على:

-----BEGIN CERTIFICATE-----
MIIFUTCCBDmgAwIBAgIHK4FgDiVqczANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
...
RLJKd+SjxhLMD2pznKxC/Ztkkcoxaw9u0zVPOPrUtsE/X68Vmv6AEHJ+lWnUaWlf
zLpfMEvelFPYH4NT9mV5wuQ1Pgurf/ydBhPizc0uOCvd6UddJS5rPfVWnuFkgQOk
WmD+yvuojwsL38LPbtrC8SZgPKT3grnLwKu18nm3UN2isuciKPF2spNEFnmCUWDc
MMicbud3twMSO6Zbm3lx6CToNFzP
-----END CERTIFICATE-----

تتوفر أداة واجهة المستخدم الرسومية مفتوحة المصدر على keystore-explorer.org

Keystore Explorer

keystore explorer هو استبدال واجهة المستخدم الرسومية مفتوحة المصدر لـ Java Line Line Utilities KeyTool و Jarsigner. يعرض Keystore Explorer وظائفه ، وأكثر من ذلك ، عبر واجهة مستخدم رسومية بديهية.

ستساعد الشاشات التالية (فهي من الموقع الرسمي)

الشاشة الافتراضية التي تحصل عليها عن طريق تشغيل الأمر:

shantha@shantha:~$./Downloads/kse-521/kse.sh

enter image description here

وتذهب إلى Examine و Examine a URL الخيار ثم أعط عنوان URL على الويب الذي تريد استيراده.

ستكون نافذة النتيجة كما يلي إذا أعطيت رابط موقع Google.enter image description here

هذه حالة من حالات الاستخدام والراحة محدثة للمستخدم (جميع الاعتمادات تذهب إلى keystore-explorer.org)

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

ولكن بالإضافة إلى ذلك إذا كنت بحاجة إلى إجراء مصادقة العميل مع SSL, ثم تحتاج إلى الحصول على شهادة خاصة بك لمصادقة الويب الخاص بك خدمة العميل.لهذا تحتاج إلى إنشاء شهادة الطلب ؛ وتنطوي العملية على خلق الخاصة بك مفتاح خاص و المقابلة المفتاح العام, وربط ذلك المفتاح العام جنبا إلى جنب مع بعض المعلومات الخاصة بك (البريد الإلكتروني, اسم, اسم نطاق, إلخ) إلى ملف يسمى طلب الشهادة.ثم يمكنك إرسال هذا طلب شهادة إلى الشركة التي طلبت بالفعل ، و أنها سوف تخلق الشهادة, قبل توقيع المفتاح العمومي الخاص بك مع مفتاح خاص ، وأنها سوف نرسل لك مرة أخرى X509 الملف مع الشهادة الخاصة بك التي يمكنك الآن إضافة إلى keystore, وعليك أن تكون على استعداد للاتصال خدمة ويب باستخدام SSL التي تتطلب مصادقة العميل.

لتوليد طلب الشهادة ، استخدم "keytool -certreq-الاسم المستعار-ملف -keypass -keystore ".وإرسال الملف الناتج إلى الشركة التي سوف يوقع عليه.

عندما تعود الشهادة تشغيل "keytool -importcert -الاسم المستعار-keypass -keystore ".

قد تحتاج إلى استخدام -storepass في كلتا الحالتين إذا كان keystore محمي (والذي هو فكرة جيدة).

إليك برنامج نصي اعتدت عليه لاستيراد مجموعة من ملفات CRT في الدليل الحالي في Java Keystore. ما عليك سوى حفظ هذا إلى نفس المجلد مثل شهادتك ، وقم بتشغيله مثل:

./import_all_certs.sh

Import_all_certs.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi

إليكم كيف نجح هذا بالنسبة لي:

  1. احفظ As .txt بيانات الشهادة بالتنسيق التالي في محرر نصوص

    ----- بدء شهادة ----- [البيانات المسلسل بواسطة Microsoft] ----- شهادة نهاية -----

  2. افتح متصفح Chrome (قد تعمل هذه الخطوة مع المتصفحات الأخرى أيضًا) إعدادات> إظهار الإعدادات المتقدمة> HTTPS/SSL> إدارة الشهادات استيراد .TXT في الخطوة 1
  3. حدد وتصدير تلك الشهادة بتنسيق مشفر BASE-64. احفظه ك
  4. يمكنك الآن استخدام Keytool أو Portecle لاستيراده إلى Java Keystore
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top