سؤال

كنت مؤخرا قد جاء عبر مشكلة مع ويندوز 2003 (على ما يبدو أنه موجود أيضا في إصدارات أخرى أيضا) ، حيث إذا SSL/TLS الخادم يطلب مصادقة شهادة العميل ولديها أكثر من 16KB الموثوق بها شهادة DNs Internet Explorer (أو أي التطبيق الأخرى التي تستخدم schannel.dll) هو غير قادر على إكمال تعارف SSL.(باختصار الخادم يكسر رسالة إلى قطع من 2^14 بايت, كما في RFC 2246 ثانية.6.2.1, ولكن القناة لم يكتب لدعم ذلك.لقد حصلت على تأكيد من الدعم لدى Microsoft أن هذا هو خلل في القناة و أنهم النظر في تحديد ذلك في إصدار مستقبلي.)

لذلك أنا أحاول أن أجد طريقة بسهولة تحليل من خلال الشهادات الموثوقة (يمكنني استخدام أباتشي مثل الخادم ، لذلك كل منهم في PEM format) للحصول على المجموع ASN.1-الشكل طول DNs (وهو كيف تحصل على إرسالها عبر السلك أثناء المصافحة) ، وبالتالي إذا كنت تحصل على قريبة جدا من الحد.أنا لم أكن قادرة على العثور على طريقة للقيام بذلك ، على الرغم من:بينسل asn1parse وظيفة ، ولكن يبدو أنها لا توفر طريقة للحصول على ASN.1 تسلسل فقط المصدر اسم ، وهو ما أريد.

أي اقتراحات ؟

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

المحلول

منذ ASN.1 هو الذات تصف ، فإنه من السهل إلى حد ما أكتب ASN.1 محلل.كما تعلمون على الأرجح ، ASN.1 البيانات يحتوي على شجرة من القيم ، حيث كل نوع القيمة هي التي حددها عالميا تعيين OID (كائن معرف).يمكنك أن تجد مجانا ASN.1 فك مع التعليمات البرمجية المصدر في: http://www.geocities.co.jp/SiliconValley-SanJose/3377/asn1JS.html.؛ 'S مكتوب في جافا سكريبت بحيث يمكنك اللعب به مباشرة في المتصفح الخاص بك.

كما السؤال الدقيق - أود أن:

  1. استخدام الموردة محلل, العثور على واحد آخر أو كتابة بلدي
  2. العثور على OID DNs الموثوق بها (التحقق من مواصفات أو ببساطة فك شهادة باستخدام الموردة ASN.1 فك الصفحة)
  3. الجمع بين اثنين من فوق إلى استخراج حجم ثقة DNs داخل الشهادة.

نصائح أخرى

بينسل asn1parse سوف نفعل ذلك, ولكن سوف تحتاج إلى القيام ببعض دليل تحليل لمعرفة أين المصدر تسلسل يبدأ.في RFC 5280 انه هذا البند 4 في TBSCertificate تسلسل (يحتمل أن تكون 3 إذا كان a v1 الشهادة) ، فور التوقيع الخوارزمية.في المثال التالي:

    0:d=0  hl=4 l= 621 cons: SEQUENCE
    4:d=1  hl=4 l= 470 cons:  SEQUENCE
    8:d=2  hl=2 l=   3 cons:   cont [ 0 ]
   10:d=3  hl=2 l=   1 prim:    INTEGER           :02
   13:d=2  hl=2 l=   1 prim:   INTEGER           :02
   16:d=2  hl=2 l=  13 cons:   SEQUENCE
   18:d=3  hl=2 l=   9 prim:    OBJECT            :sha1WithRSAEncryption
   29:d=3  hl=2 l=   0 prim:    NULL
   31:d=2  hl=2 l=  64 cons:   SEQUENCE
   33:d=3  hl=2 l=  11 cons:    SET
   35:d=4  hl=2 l=   9 cons:     SEQUENCE
   37:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
   42:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :US
   46:d=3  hl=2 l=  26 cons:    SET
   48:d=4  hl=2 l=  24 cons:     SEQUENCE
   50:d=5  hl=2 l=   3 prim:      OBJECT            :organizationName
   55:d=5  hl=2 l=  17 prim:      PRINTABLESTRING   :Test Certificates
   74:d=3  hl=2 l=  21 cons:    SET
   76:d=4  hl=2 l=  19 cons:     SEQUENCE
   78:d=5  hl=2 l=   3 prim:      OBJECT            :commonName
   83:d=5  hl=2 l=  12 prim:      PRINTABLESTRING   :Trust Anchor
   97:d=2  hl=2 l=  30 cons:   SEQUENCE
   99:d=3  hl=2 l=  13 prim:    UTCTIME           :010419145720Z
  114:d=3  hl=2 l=  13 prim:    UTCTIME           :110419145720Z
  129:d=2  hl=2 l=  59 cons:   SEQUENCE

المصدر DN يبدأ في تعويض 31 و لديه رأس طول من قيمة طول 64 مجموع طول 66 بايت.هذا ليس من السهل جدا أن السيناريو بالطبع...

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