Вопрос

У нас есть существующее приложение для выдачи сертификата (C #, ASP.NET, JavaScript), которое выдает сертификаты для пользователей Windows XP, используя XenRoll в IE. Мне нужно расширить это для поддержки Windows Vista и пользователей Windows 7, также используя IE.

Для Vista и 7 Microsoft заменил управление ActiveX Xenroll с новым CertenRoll Control. Я получил эту работу в 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?

Это было полезно?

Решение

Решение было установить Исправление Kb 2078942..

Обратите внимание, что этот исправление не претендует на решение этой проблемы, но это делает! Скорее аннанинг, или я бы наступил на него намного раньше: - /

Я верю, что это регрессионная ошибка из Vista, так как был исправление Для Vista исправить точную проблему, которую я испытывал.

Спасибо и УПВОТЕ пошли в Бруно за проведение времени вчера, пытаясь помочь мне решить это.

Другие советы

Я написал Этот скрипт Данное назад для демонстрации (в сочетании с эта страница). Он поддерживает <keygen/> и заменяет это с Ксеролл или 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