سؤال

أحاول إنشاء شهادة موقعة ذاتيًا لاستخدامها مع Apache Tomcat 6.تؤدي كل شهادة يمكنني تقديمها دائمًا إلى اتصال المتصفح بـ AES-128.يريد العميل مني أن أثبت أنه يمكنني إنشاء اتصال على AES-256.

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

كيف يمكنني الحصول على اتصال متصفح Tomcat لاستخدام AES-256 بشهادة موقعة ذاتيًا؟

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

المحلول

حسنًا، أعتقد أنني اكتشفت هذا للتو.

كما قلت أعلاه، الجزء الأساسي من المعرفة هو أن الشهادة لا تهم، طالما أنها تم إنشاؤها باستخدام خوارزمية تدعم تشفير AES 256 بت (على سبيل المثال، RSA).فقط للتأكد من أننا على نفس الصفحة، بالنسبة للاختبار، قمت بإنشاء شهادتي الموقعة ذاتيًا باستخدام ما يلي:

keytool -genkey -alias tomcat -keyalg RSA

الآن، عليك التأكد من أن تطبيق Java على الخادم الخاص بك يدعم AES-256، وهذا هو الجزء الصعب.لقد أجريت اختباري على صندوق OS X (OS 10.5)، وعندما راجعت لرؤية قائمة الأصفار التي يدعمها افتراضيًا، لم يكن AES-256 مدرجًا في القائمة، ولهذا السبب كان استخدام تلك الشهادة التي قمت بإنشائها أعلاه فقط إنشاء اتصال AES-128 بين متصفحي وTomcat.(حسنًا، من الناحية الفنية، TLS_RSA_WITH_AES_256_CBC_SHA لم يكن موجودًا في القائمة - هذا هو التشفير الذي تريده، وفقًا لـ قائمة JDK 5 هذه.)

للاكتمال، إليك تطبيق Java القصير الذي قمت بإنشائه للتحقق من الأصفار المدعومة في صندوقي:

import java.util.Arrays;
import javax.net.ssl.SSLSocketFactory;

public class CipherSuites {
  public static void main(String[] args) {
    SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();
    String[] ciphers = sslsf.getDefaultCipherSuites();
    Arrays.sort(ciphers);
    for (String cipher : ciphers) {
      System.out.println(cipher);
    }
  }
}

اتضح أن JDK 5، وهو ما قام OS X بتثبيته افتراضيًا، يحتاج إلى تثبيت "Unlimited Strength Jurisdiction Policy Files" لإخبار Java أنه من المقبول استخدام مستويات التشفير الأعلى بت؛أنت تستطيع العثور على تلك الملفات هنا (قم بالتمرير لأسفل وانظر إلى الجزء العلوي من قسم "التنزيلات الأخرى").لست متأكدًا من أن JDK 6 يحتاج إلى القيام بنفس الشيء، ولكن نفس ملفات السياسة لـ JDK 6 متوفرة هنا, ، لذلك أفترض أنه كذلك.قم بفك ضغط هذا الملف، واقرأ الملف التمهيدي لمعرفة كيفية تثبيت الملفات حيث تنتمي، ثم تحقق من الأصفار المدعومة مرة أخرى...أراهن أن AES-256 موجود الآن في القائمة.

إذا كان الأمر كذلك، فيجب أن تكون ذهبيًا؛ما عليك سوى إعادة تشغيل Tomcat، والاتصال بمثيل SSL الخاص بك، وأراهن أنك سترى الآن اتصال AES-256.

نصائح أخرى

danivo، طالما أن شهادة الخادم قادرة على تشفير AES، فإن مستوى التشفير بين المتصفح والخادم يكون مستقلاً عن الشهادة نفسها - ويتم التفاوض على مستوى التشفير هذا بين المتصفح والخادم.بمعنى آخر، ما أفهمه هو أن الشهادة لا تحدد مستوى التشفير، بل فقط يكتب التشفير (على سبيل المثال، AES).يرى هذا الرابط (PDF) للتحقق من ذلك، وكيف يقوم بائعو الشهادات ببيع الشهادات "التي تدعم 256 بت" على الرغم من أن الشهادة ليست هي التي تحدد قدرة 256 بت.

لذا فأنت على ما يرام مع الشهادة التي لديك والتي تدعم AES-128 - والمفتاح هو معرفة كيفية جعل Tomcat يدعم AES-256 (نظرًا لأن معظم المتصفحات الرئيسية، إن لم يكن كلها، تدعمها بالتأكيد).

يتم التفاوض على قوة اتصال SSL بين المتصفح والخادم (أو أي شخص يوفر SSL).قد يكون متصفحهم يطلب تشفيرًا أضعف.هل شاهدوا من قبل اتصال 256-AES SSL على هذا المتصفح؟لا تزال AES-128 خوارزمية آمنة للغاية، لذلك ما لم يكن لديهم شيء يريدون حمايته من عدم الاتصال بالإنترنت (فكر في:قوة غاشمة للحاسوب العملاق تولد 2^128 مفتاحًا ويكيبيديا) الهجوم، يجب أن يكون 128 بت جيدًا.إذا كانوا يحتاجون حقًا إلى هذا القدر من الحماية، فمن المحتمل أن يستخدموا حلاً أكثر استقرارًا للوصول إلى البيانات من موقع الويب، حيث يكون نفق ssh الآمن إلى الخادم الخاص بهم مضادًا للرصاص (يمكنك إخبارهم أنه يمكنهم الحصول على 256 بت AES و 4096 بت RSA أيضًا)، أو VPN حسب التنفيذ.

أعتقد أن ما تبحث عنه هوhttp://www.sslshopper.com/article-how-to-disable-weak-ciphers-and-ssl-2-in-tomcat.html وhttp://docs.Oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA

اعتمادًا على ما إذا كنت تريد أمانًا وتوافقًا جيدًا أو شهادة PCI.

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