问题是这样的:
现在利用vista下的certenroll在客户端申请证书:
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="VistaCert.aspx.cs" Inherits="VistaCert" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">
<title>Certificate Request test</title>
<object id="objCertEnrollClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09" ></object>
</head>
<body >
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
<input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />
</div>
</form> <script language="javascript" type="text/javascript">
//CreateRequest();
function CreateRequest()
{
if(typeof(objCertEnrollClassFactory) != "object")
{
alert("objectnull1");
return;
}
if( (objCertEnrollClassFactory.object == null) )
{
alert("objectnull2");
return;
}
document.write("<br>Create Request..."); try {
alert("try");
var objCSP = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformation");
alert("trytre");
var objCSPs = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformations");
var objPrivateKey = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509PrivateKey");
var objRequest = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10")
var objObjectIds = objCertEnrollClassFactory.CreateObject("X509Enrollment.CObjectIds");
var objObjectId = objCertEnrollClassFactory.CreateObject("X509Enrollment.CObjectId");
var objX509ExtensionEnhancedKeyUsage = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509ExtensionEnhancedKeyUsage");
var objExtensionTemplate = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509ExtensionTemplateName")
var objDn = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX500DistinguishedName")
var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment") objCSPs.Add(objCSP); // Provide key container name, key length and key spec to the private key object
objPrivateKey.ProviderName = " My Cryptographic Service Provider ";
objPrivateKey.ProviderType = 1; objPrivateKey.KeySpec= 1;
//// objPrivateKey.GenKeyFlags = 1;
objPrivateKey.KeyUsage = 1; //0x4001;
objPrivateKey.ContainerName = "itest";
objPrivateKey.Length = 1024;
objRequest.InitializeFromPrivateKey(1, objPrivateKey, ""); // context user = 1 // 1.3.6.1.5.5.7.3.2 Oid - Extension
objObjectId.InitializeFromValue("1.3.6.1.5.5.7.3.2");
objObjectIds.Add(objObjectId);
objX509ExtensionEnhancedKeyUsage.InitializeEncode(objObjectIds);
objRequest.X509Extensions.Add(objX509ExtensionEnhancedKeyUsage);
objDn.Encode("CN=alejacma", 0);
objRequest.Subject = objDn;
objEnroll.InitializeFromRequest(objRequest);
var pkcs10 = objEnroll.CreateRequest(3);
document.write("<br>" + pkcs10);
document.write("<br>The end!"); }
catch (ex)
{
alert("7");
document.write("<br>" + ex.description);
return false;
} return true;
}
CreateRequest();
function Button1_onclick()
{
}function Button2_onclick()
{
} </script>
</body>
</html>
就是说网页还没有加载完那么这样申请时可以的但是如果我把最后的CreateRequest();(倒数第10行)放入
function Button1_onclick()
{}
中
就是想要按下button1才去申请证书
即
function Button1_onclick()
{
CreateRequest();
}那么certenroll就会报 不支持此对象或方法 非常奇怪 望高手解答 非常感谢
现在利用vista下的certenroll在客户端申请证书:
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="VistaCert.aspx.cs" Inherits="VistaCert" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">
<title>Certificate Request test</title>
<object id="objCertEnrollClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09" ></object>
</head>
<body >
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
<input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />
</div>
</form> <script language="javascript" type="text/javascript">
//CreateRequest();
function CreateRequest()
{
if(typeof(objCertEnrollClassFactory) != "object")
{
alert("objectnull1");
return;
}
if( (objCertEnrollClassFactory.object == null) )
{
alert("objectnull2");
return;
}
document.write("<br>Create Request..."); try {
alert("try");
var objCSP = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformation");
alert("trytre");
var objCSPs = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformations");
var objPrivateKey = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509PrivateKey");
var objRequest = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10")
var objObjectIds = objCertEnrollClassFactory.CreateObject("X509Enrollment.CObjectIds");
var objObjectId = objCertEnrollClassFactory.CreateObject("X509Enrollment.CObjectId");
var objX509ExtensionEnhancedKeyUsage = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509ExtensionEnhancedKeyUsage");
var objExtensionTemplate = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509ExtensionTemplateName")
var objDn = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX500DistinguishedName")
var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment") objCSPs.Add(objCSP); // Provide key container name, key length and key spec to the private key object
objPrivateKey.ProviderName = " My Cryptographic Service Provider ";
objPrivateKey.ProviderType = 1; objPrivateKey.KeySpec= 1;
//// objPrivateKey.GenKeyFlags = 1;
objPrivateKey.KeyUsage = 1; //0x4001;
objPrivateKey.ContainerName = "itest";
objPrivateKey.Length = 1024;
objRequest.InitializeFromPrivateKey(1, objPrivateKey, ""); // context user = 1 // 1.3.6.1.5.5.7.3.2 Oid - Extension
objObjectId.InitializeFromValue("1.3.6.1.5.5.7.3.2");
objObjectIds.Add(objObjectId);
objX509ExtensionEnhancedKeyUsage.InitializeEncode(objObjectIds);
objRequest.X509Extensions.Add(objX509ExtensionEnhancedKeyUsage);
objDn.Encode("CN=alejacma", 0);
objRequest.Subject = objDn;
objEnroll.InitializeFromRequest(objRequest);
var pkcs10 = objEnroll.CreateRequest(3);
document.write("<br>" + pkcs10);
document.write("<br>The end!"); }
catch (ex)
{
alert("7");
document.write("<br>" + ex.description);
return false;
} return true;
}
CreateRequest();
function Button1_onclick()
{
}function Button2_onclick()
{
} </script>
</body>
</html>
就是说网页还没有加载完那么这样申请时可以的但是如果我把最后的CreateRequest();(倒数第10行)放入
function Button1_onclick()
{}
中
就是想要按下button1才去申请证书
即
function Button1_onclick()
{
CreateRequest();
}那么certenroll就会报 不支持此对象或方法 非常奇怪 望高手解答 非常感谢
我也在做vista下证书注册,我不要申请,证书是现成的,是第三方的根证书,我想写javascript调用certenroll.dll来自动注册,但是没有成功.(xp中用xenroll.dll成功了),如果你已经解决或知道如何做,请回复,或发邮件给我,我急用,万分感谢,到时我给你加分,好吗?
我的e_mail:[email protected]