У нас есть существующее приложение для выдачи сертификатов (C#, ASP.NET, JavaScript), которое выдает сертификаты пользователям Windows XP с использованием XenRoll в IE. Мне нужно расширить это для поддержки пользователей Windows Vista и Windows 7, также используя IE.Не удается установить сертификат в Windows 7 с помощью CertEnroll
Для Vista и 7 Microsoft заменила XenRoll ActiveX controll новым элементом управления 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?
У меня нет проблем с настройками ActiveX - если вы запустите CertEnroll через HTTPS, вы не получите этого. – Cocowalla
Действительно, я просто запускал это на тестовом простом HTTP-сервере сегодня. – Bruno
Я только что проверил, это первый, который работает для меня 'enrollObj.InstallResponse (4, xmlHttpRequest.responseText, 0," ");' Может быть, что-то еще в остальной части инициализации. (Извините, я не могу вспомнить все подробности прямо сейчас.) – Bruno