سؤال

واجهت مشكلة أخرى باستخدام SSL و Tomcat: لقد قمت بتكوين مفتاح مفتاح يحتوي على مفتاح وشهادة (شهادة الخادم التي أرغب في تقديمها للعملاء الذين يتصلون بالموقع). لقد فعلت نفس الشيء بالنسبة لـ TrustStore (سأحتاج إلى مصادقة العميل).

المشكلة التي لدي الآن هي أنه عندما أتصل بمثيل Tomcat الخاص بي عبر HTTPS ، فإن الشهادة المقدمة إلي (شهادة الخادم) ليست شهادة الخادم الفعلية ، بل هي مفتاح في JKS Keystore. باستخدام -djavax.net.debug = SSL يكشف أنه يقدم CA الصحيح لمصادقة العميل ، ولكن ليس شهادة الخادم الصحيحة.

adding as trusted cert:
  Subject: CN=A
  Issuer:  CN=A
  Algorithm: RSA; Serial number: -
  Valid from Tue Nov 10 14:48:31 CET 2009 until Mon Feb 08 14:48:31 CET 2010

adding as trusted cert:
  Subject: X
  Issuer:  X
  Algorithm: RSA; Serial number: -
  Valid from Wed Jan 19 01:00:00 CET 2005 until Mon Jan 19 00:59:59 CET 2015

لقد استبدلت القيم الحقيقية مع حاملي المكان. A = اسم مجال الخادم (ولكن في هذه الحالة ، لسبب ما هذا هو المفتاح وليس الشهادة). x = a verisign ca (يجب أن يكون هذا صحيحًا). لديّ شهادة موجودة أود استخدامها لتقديمها للعملاء ، والتي قمت باستيرادها إلى keystore JKS باستخدام KeyTool.

تكوين موصل Tomcat:

Connector port="444" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"       
keystoreFile="conf/ssl/keystore.jks"
keystorePass="xx"
keyAlias="testkey"
truststoreFile="conf/ssl/truststore.jks"
truststorePass="xx"

أي فكرة لماذا لا تقدم مثيل Tomcat الخاص بي الشهادة الصحيحة؟

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

المحلول

المشكلة هي (على ما يبدو - لا يمكنني تأكيد ذلك حقًا) أنه من المستحيل استيراد شهادة تم إنشاؤها مسبقًا (ومفتاح مطابقة) بشكل صحيح في JKS Keystore وتقديمها بشكل صحيح بواسطة Tomcat.

الموقف الذي حدثت فيه مشكلتي هو على النحو التالي:

  1. لدي ملف شهادة ، قمت بإنشائه باستخدام OpenSSL من نقطة الصفر (Key + CSR -> شهادة) ، موقعة من قبل CA.
  2. أرغب في تكوين tomcat بحيث يعرض هذه الشهادة بالذات للمستخدمين الذين يتصلون بموقعي.

الحل الذي وجدته للعمل هو:

  1. تحويل الشهادة الحالية و مفتاحها الخاص لتنسيق DER. على سبيل المثال (باستخدام OpenSSL):

    ل مفتاح سري;

    openssl pkcs8 -topk8 -nocrypt -in my_private_key.key -inform PEM -out my_private_key.der -outform DER

    للفعلي شهادة موقعة;

    openssl x509 -in my_certificate.crt -inform PEM -out my_certificate.der -outform DER

  2. استيراد كلا ملفين der في مفاتيح keystore (ملف JKS) باستخدام فئة Java مخصصة.

    java ImportKey my_private_key.der my_certificate.der

    لم أكن أعرف ذلك بنفسي (كل الائتمان يذهب إلى المخترعين الأصليين). مصدر فئة Java هذه ، ويمكن العثور على بعض التفاصيل الأخرى هنا و هنا. لقد قمت بتعديل هذه الفئة قليلاً بحيث يكون هناك معلمة ثالثة (أو 4) تحدد موقع إخراج ملف JKS الناتج.

النتيجة النهائية هي keystore JKS يمكن استخدامها بعد ذلك في تكوين موصل Tomcat باعتباره مفتاح Keystore. ستقوم الأداة أعلاه بإنشاء ملف JKS مع كلمات مرور افتراضية للمفتاح وملف JKS نفسه ، يمكن تغييرها لاحقًا باستخدام keytool -storepasswd و keytool -keypasswd. آمل أن يساعد هذا للأشخاص الذين يواجهون نفس القضية.

نصائح أخرى

يجب أن يعمل التكوين الخاص بك بشكل صحيح.

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

تأكد من استيراد الشهادة إلى JKS ، مع الاسم المستعار المناسب (Testkey)

التوسع في تعليق bozho ،

كان هذا أمرًا بالغ الأهمية. "المفتاح والشهادة المشتراة يجب أن تكون تحت الاسم المستعار نفسه".

يجب استيراد شهادة SSL التي تم شراؤها من CA (Verisign ، Digicert وما إلى ذلك) بنفس الاسم المستعار مثل المفتاح الخاص الذي تم إنشاؤه قبل إنشاء المسؤولية الاجتماعية للشركات. بعد استيراد الشهادة المشتراة إلى keystore باستخدام Java KeyTool ، سترى "رد الشهادة المضافة إلى Keystore".

للتحقق من سلسلة الثقة ، استخدم الأمر الطرفي Openssl S_Client -Connect yourdomain.com:443 -ShowCerts. يبدأ عند الشهادة ويؤدي إلى جذر موثوق به.

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