الحصول على ASN.1 المصدر سلاسل من بيم الملفات ؟
سؤال
كنت مؤخرا قد جاء عبر مشكلة مع ويندوز 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 مكتوب في جافا سكريبت بحيث يمكنك اللعب به مباشرة في المتصفح الخاص بك.
كما السؤال الدقيق - أود أن:
- استخدام الموردة محلل, العثور على واحد آخر أو كتابة بلدي
- العثور على OID DNs الموثوق بها (التحقق من مواصفات أو ببساطة فك شهادة باستخدام الموردة ASN.1 فك الصفحة)
- الجمع بين اثنين من فوق إلى استخراج حجم ثقة 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 بايت.هذا ليس من السهل جدا أن السيناريو بالطبع...