سؤال

لدينا تطبيق واحد قائم على المتصفح حيث نريد جعل المستخدم إعادة صياغة عند إدخاله. لذلك عندما يصلون إلى عنوان URL هذا ، نريد أن يتم تقديمهم مع موجه الدبوس بحيث يتعين عليهم إعادة صياغة. هل هناك طريقة معقولة للقيام بذلك؟

المعلومات المضافة: هذا لبطاقة CAC ومحطات العمل لها النشاط و tumbleweed عليها. أيضا ، يمكنني إضافة خدمة إلى محطات العمل إذا لزم الأمر. المستعرضات هي كل IE7. خادم الويب هو IIS 6 والصفحات مكتوبة في ASP.NET (في الغالب).

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

المحلول

هناك عدد قليل من البرامج المختلفة المتضمنة هنا.

الأول هو البطاقة نفسها. لإجراء توقيع رقمي ، يجب أن يكون CAC في حالة "التحقق" ، مما يعني إدخال دبوس بعد إدراج البطاقة. علاوة على ذلك ، يحتوي كل مفتاح على البطاقة على علامة تشير إلى ما إذا كان يجب إدخال دبوس في كل مرة يتم فيها استخدام المفتاح. لم أتحقق ، لكنني أعتقد أن هذا تم تعيينه لزوج مفتاح "البريد الإلكتروني" على CAC. وبالتالي ، ستحتاج إلى العثور على المفاتيح التي تحتوي على مجموعة العلم "التحقق دائمًا" ، وتكوين مصادقة المسار على الخدمة لقبول تلك المفاتيح فقط. قد تكون قادرًا على طلب OID معين في الاستخدام المفتاح الموسع ، أو استبعاد بعض الشهادات الوسيطة DOD من بناء المسار (تم الإبلاغ عنها كما تم إلغاؤها ، ربما).

يمكن أن يقوم الوسيط على الجهاز الذي يتحدث إلى البطاقة أيضًا بتخزين الدبوس ، ويوفره للبطاقة كلما تشير البطاقة إلى أنها تتطلب دبوسًا قبل أن تكمل العملية. أعتقد أن ActivClient كان يقوم بذلك من خلال ميزة التخزين المؤقت لـ PIN من خلال الإصدار 6 ، ولكن في الإصدار 7 ، يبدو أن هذا الخيار قد فقد. لم أجد أي شيء مثل هذا في دعم Windows Bleant-In Piv. هذه "الميزة" يمكن أن تسوية الأمان ، لذلك أعتقد أنه تمت إزالته عن عمد ولن يكون هناك أي اختراقات تسجيل أو غير ذلك لاستعادة السلوك. هذا شيء لن تتحكم فيه ، إلا إذا كنت تدير آلات المستخدمين ؛ لا يوجد خيار HTTP أو TLS الذي يمكنك استخدامه لفرض إدخال دبوس. ولكن ، مع أنظمة أحدث ، لا ينبغي أن تكون مشكلة.

على جانب الخادم ، يجب أن تحدث المصافحة الكاملة من أجل جعل العميل يؤد المصادقة. لن تحدث مصادقة العميل إذا كانت هناك جلسة TLS صالحة. لذلك ستحتاج إلى إيجاد طريقة لإبطال جلسة TLS (وليس جلسة التطبيق ، والتي ربما ترتبط بملف تعريف ارتباط HTTP) قبل طلب المصادقة ، أو توجيه طلب المصادقة إلى واجهة أخرى لا تحتوي على جلسات ممكّنة.

نصائح أخرى

هناك طريقتان لإجراء مصادقة عميل بطاقة SmartCard على الويب: TLS/SSL القياسي أو المكونات الإضافية المخصصة للمتصفح. أفترض أنك تتحدث عن متصفحات الويب القياسية (IE/FF/Safari) ومصادقة SSL.

هناك شيئان مهمان لمطالبات الدبوس:

  • جلسة SSL و SSL جلسة التخزين المؤقت للمتصفح
  • حالة المصادقة على البطاقة للمفتاح الخاص ذي الصلة
  • طريقة تنفيذ الوسيطة.

في النهاية ، من منظور الأمان ، فإن البطاقة هي التي تعرف متى "تسأل" دبوس - بعض البطاقات والمفاتيح تتطلب دبوسًا لكل عملية مع المفتاح ، بعض البطاقات على ما يرام للحصول على دبوس مرة واحدة وترك المفاتيح في الحالة المصادقة حتى تتم إزالتها من القارئ أو إعادة تعيينها بواسطة تطبيق.

إذا تعذر إعادة استخدام الجلسة الموجودة في ذاكرة التخزين المؤقت للمتصفح أو عند إنشاء الاتصال ، فإن البرامج الوسيطة للبطاقات الذكية (PKCS#11 على Linux أو وحدة CryptoAPI/BASECSP على Windows أو Tokend على OSX) تحتاج إلى التحدث إلى المفاتيح على البطاقة. إذا كانت حالة المصادقة الموجودة على البطاقة تتطلب إدخال دبوس ، يتم عادةً ما يتم تشغيل رد الاتصال بواسطة المتصفح. أو إذا عرف الوسيطة أنه سيحتاج إلى دبوس ، فسيسأله قبل التحدث إلى البطاقة.

لا توجد علاقة 1: 1 بين إدخال دبوس وإعادة صياغة حقوق الوصول إلى المفتاح الخاص وإعادة صياغة جلسة SSL.

باستخدام SSL القياسي ، تعتمد على طريقة تنفيذ SSL في المتصفحات ولا يمكن أن يكون لها "إعادة صرف مصادقة بنسبة 100 ٪ عن طريق إدخال PIN" على جانب العميل.

إذا كنت تستخدم Linux ، ثم باستخدام OpenSC (والتي يمكن لـ AFAIK استخدام بطاقات CAC) ، يمكنك تعيين "Transaction_reset" في OpenSc.Conf إلى True ، مما يؤدي إلى إعادة تعيين البطاقة بعد كل معاملة (كل مفاوضات جلسة SSL) وبهذه الطريقة يمكنك التأكد من أنه كلما فتحت جلسة SSL جديدة ، يتعين على المستخدم إدخال PIN مرة أخرى. هذا هو تكوين من جانب العميل ، وليس ميزة التي يبدأها الخادم.

يمكنك استخدام وظيفة JavaScript لجعل المتصفح ينسى ذاكرة التخزين المؤقت SSL الموجودة على عدد قليل من المتصفحات:

function logout() {
    // clear browser authentication cache
    // IE specific
    try
    {
        document.execCommand("ClearAuthenticationCache", "false");
    }
    catch(e)
    {
        // do nothing
    }

    // clear for firefox or any browser that supports window.crypto API
    if (window.crypto && typeof window.crypto.logout === "function") {
        window.crypto.logout();
    }
}

يمكنك استخدام طريقة JavaScript SetTimeout للاتصال بوظيفة تسجيل الدخول أعلاه وربما إعادة توجيهها إلى صفحة logout.aspx لإجبار العميل على إدخال رقم التعريف الشخصي الجديد.

لكنه يستخدم JavaScript والرمز يعتمد على المتصفح ولا يعمل مع جميع المتصفحات.

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