У меня проблема с указанием параметра шаблона в InitializeFromPrivateKey () для X509Enrollment.CX509CertificateRequestPkcs10 . Все, кроме шаблона «Пользователь» , приводит к следующему исключению: -
CertEnroll :: CX509CertificateRequestPkcs10 :: InitializeFromPrivateKey: запрошенный шаблон сертификата не поддерживается этим CA. 0x80094800 (-2146875392)
Существует определенный шаблон сертификата, который мне нужно использовать, и когда я пробую его, код выдает исключение. Шаблон существует в ЦС и на клиентском компьютере, на котором выполняется следующий код.
Javascript код следующим образом:
<script type="text/javascript">
var sCertificate = null;
var sDistinguishedName = "C=\"\";S=\"\";L=\"\";O=\"XXXXX\";OU=\"XXXXXXX\";E=\"XXXXX@XXXX.com\";CN=\"xxxxxxx\";";
var template = "RegistrationCert"; //Anything Other than "User" fails, have tried template Oid too.
var classFactory = new ActiveXObject("X509Enrollment.CX509EnrollmentWebClassFactory");
var objEnroll = classFactory.CreateObject("X509Enrollment.CX509Enrollment");
var objPrivateKey = classFactory.CreateObject("X509Enrollment.CX509PrivateKey");
var objRequest = classFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10");
var objDN = classFactory.CreateObject("X509Enrollment.CX500DistinguishedName");
objPrivateKey.ProviderName = "Microsoft Enhanced Cryptographic Provider v1.0";
objPrivateKey.KeySpec = "1";
objPrivateKey.ProviderType = "1";
try
{
objRequest.InitializeFromPrivateKey(1, objPrivateKey, template);
objDN.Encode(sDistinguishedName, 0);
objRequest.Subject = objDN;
objEnroll.InitializeFromRequest(objRequest);
sCertificate = objEnroll.CreateRequest(1);
document.writeln(sCertificate);
}
catch (ex)
{
document.writeln(ex.description);
}
</script>
Пара других вопросов
- Я предполагаю, что шаблон должен существовать на клиентском компьютере? Иначе как он узнает местоположение CA для запроса шаблонов?
- Работает ли CertEnroll на клиенте даже с сервером Windows 2003 CA ??
Если вы можете мне помочь, это будет высоко ценится !!!
Дополнительная информация
- Клиент - Windows 7, с клиентом MS IE9, работающим от имени администратора.
- Доступ к веб-приложению, на котором расположена указанная выше страница, осуществляется через HTTP.
- Веб-приложение размещено на CA Server Win2003.
Перед публикацией я посмотрел ...
- потоки Stackoverflow относительно CertEnroll + InitializeFromPrivateKey
- Блоги об использовании OID шаблона, а не имени шаблона
- MSDN / Сайт Алеякмы
- CertEnroll API на MSDN