首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在尝试特定模板时,InitializeFromPrivateKey()中的CX509CertificateRequestPkcs10对象中的模板参数会导致异常

在尝试特定模板时,InitializeFromPrivateKey()中的CX509CertificateRequestPkcs10对象中的模板参数会导致异常
EN

Stack Overflow用户
提问于 2011-08-05 15:55:27
回答 1查看 2.6K关注 0票数 4

在InitializeFromPrivateKey()中指定X509Enrollment.CX509CertificateRequestPkcs10对象的模板参数时,我遇到了问题。除“用户”模板之外的任何其他内容都会导致以下异常:

CertEnroll::CX509CertificateRequestPkcs10::InitializeFromPrivateKey:此CA不支持请求的证书模板。0x80094800 (-2146875392)

有一个特定的证书模板需要使用,当我尝试它时,代码会抛出异常。模板存在于CA和运行以下代码的客户端机器上。

Javascript代码如下:

代码语言: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甚至对Windows2003CA服务器工作吗??

如果你能帮我,那将是非常感谢!

附加信息

  • 客户端为Windows 7,MS IE9客户端以管理员身份运行。
  • 承载上述页面的Web是通过HTTPs访问的。
  • Web托管在Win2003 CA服务器上。

之前我看过.

EN

回答 1

Stack Overflow用户

发布于 2011-08-06 07:36:57

好吧,那么it..typical。

  • 使用CX509ExtensionTemplateName,并使用OID模板值调用
  • 不要在InitializeFromPrivateKey中指定模板param。

即:

代码语言:javascript
运行
复制
var objExtensionTemplate = classFactory.CreateObject("X509Enrollment.CX509ExtensionTemplateName")


objRequest.InitializeFromPrivateKey(1, objPrivateKey, ""); //empty string, don't specify template here
objExtensionTemplate.InitializeEncode(template); //Specify Template as OID value!
objRequest.X509Extensions.Add(objExtensionTemplate);

在CA上验证该请求是针对我指定的模板类型的,并且实际上只为该类型创建了一个证书。

希望有一天这个能帮到别人。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6959128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档