سؤال

لدينا شهادة موجودة إصدار (C#، ASP.NET ، JavaScript) يصدر الشهادات إلى مستخدمي Windows XP باستخدام Xenroll في IE. أحتاج إلى تمديد هذا لدعم مستخدمي Windows Vista و Windows 7 ، باستخدام IE.

بالنسبة لـ Vista و 7 ، استبدلت Microsoft Control Xenroll ActiveX مع التحكم الجديد في Certenroll. لقد حصلت على هذا العمل في Vista SP2 ، لكن في 7 أحصل على هذا الخطأ في خطوة التثبيت:

Certenroll :: CX509enrollment :: InstallResponse: سلسلة شهادات تمت معالجتها ، ولكن تم إنهاءها في شهادة الجذر غير الموثوق بها من قبل مزود الثقة. 0x800B0109 (-2146762487)

إليك مقتطف من HTML & JavaScript ذات الصلة:

<object id="classFactoryObj" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object>

<script type="text/javascript">
    function InstallCert() 
    {  
        try
        {
            var classFactory = document.getElementById("classFactoryObj");
            var objEnroll = classFactory.CreateObject("X509Enrollment.CX509Enrollment");

            var signedCert = '-----BEGIN CERTIFICATE-----' + 
                'REMOVED FOR BREVITY' + 
                '-----END CERTIFICATE-----';

            objEnroll.Initialize(1); // User context
            objEnroll.InstallResponse(4, signedCert, 6, ""); // AllowUntrustedRoot = 4

            alert('Certificate installed');
        }
        catch (ex)
        {
            alert('Unable to install certificate: ' + ex.description);
        }
     }

    InstallCert();
</script>

الآن ، صحيح أن شهادة الجذر غير موثوق بها ، لكنني أتصل بـ InstallResponse مع المعلمة الأولى التي تم تعيينها على 4 ، والتي من المفترض أن تسمح بالتثبيت حتى لو لم يتم الوثوق بشهادة الجذر. يعمل هذا كما هو معلن في Vista ، ولكن لا يبدو أنه في Windows 7.

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

أفعل شيئا خطأ هنا؟ هل حصل أي شخص آخر على هذا العمل في Windows 7؟

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

المحلول

كان الحل هو التثبيت Hotfix KB 2078942.

لاحظ أن هذا الإصلاح الساخن لا يدعي إصلاح هذه المشكلة ، لكنه يفعل! بدلاً من ذلك ، أو كنت سأصادفها قبل ذلك بكثير:-/

أعتقد أن هذا خطأ في الانحدار من Vista ، حيث كان هناك الإصلاح الساخن بالنسبة لـ Vista لإصلاح المشكلة الدقيقة التي كنت أعاني منها.

الشكر والتصويت يخرج إلى برونو لقضاء الوقت أمس في محاولة لمساعدتي في حل هذا.

نصائح أخرى

كتبت هذا السيناريو منذ فترة من الوقت لتوضيح (بالتزامن مع هذه الصفحة). انها تؤيد <keygen/> ويحل محله Xenroll أو certenroll يدعو إلى Internet Explorer. لقد تطور المشروع قليلاً منذ ذلك الحين ، لكنني اختبرت للتو هذا الفرع مع IE8 على Windows 7 وعملت. شهادة CA لم تكن على جهاز العميل على الإطلاق. اضطررت إلى خفض إعدادات الأمان إلى "منخفضة" لتشغيل ActiveX (وإلا ، فلن تقدم الطلب ، لذلك حتى أقل تثبيت الشهادة في الاستجابة).

إذا كان ذلك يساعد ، أفعل هذا:

try {
    enrollObj.InstallResponse(4, xmlHttpRequest.responseText,
            0, "");
    window.alert("A certificate has been installed.");
} catch (e1) {
    try {
        enrollObj.InstallResponse(0,
                xmlHttpRequest.responseText, 0, "");
        window.alert("A certificate has been installed.");
    } catch (e2) {
        window
                .alert("You're probably using Vista without SP1 or above, in which case you need to add the certificate of this authority as a trusted root certificate.");
    }
}

يجب أن أعترف أنني لم أختبر أي من هاتين الحالتين تم استخدامها (لأنها نفس رسالة التنبيه).

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