Win7 是个好东西啊~ 因为太好了
推荐给了别人, 但这也是问题的开始,
因为是老机器 (Benq joybook 6000),弄得有些乱, 因此想重做。
于是安装了最新的 Win7,但有1个大失败, 就是 855GM 显卡 没有驱动, 这个郁闷啊
Aero 开不了了, 不过这个也不常用,也就算了。
之后,没有什么问题,直到 支付宝这,就完了。
虽然,当初认为是Win7问题,以为没有方法, 但网上一搜,原来 尝鲜的也不少啊~
网上那些方法都试过了,但却没用。 于是开始了一番探索,终于成功导入证书。
在开始之前,先说一下几点
系统, 是WIN 7 32位 中文版的, BT上弄来的,不知道是原转的还是后大补丁的。
如果你已经成功导入,那么恭喜你,你没必要继续读下去了。(学习的话,也可以)
如果你还没有成功导入证书,并且试了你按照网上的文章操作了(http://blog.alipay.com/638.html)还是无效的,
那么你可参考本文试试,不过 建议你还原之后在做。 这部分可以看最后的注释。
1、定位到注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility\{127698e4-e730-4e5c-a2b1-21490a70c8a1}
(注:这个是64位的,32位的是
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{127698e4-e730-4e5c-a2b1-21490a70c8a1})
将 Compatibility Flags 设置为0 (默认 400)
2、 然后浏览 http://www.myca.cn/myca/installRoot.asp (注3)
看到 证书安装失败
不用管这个, 点击确定。
然后, 注意到 IE 下边出现 的信息栏, 单击, 然后选择 “为此计算机上的所有用户安装此加载项。”
之后页面会自动刷新,然后 UAC会弹出, 选择 “是” (因为UAC是在安全桌面, 无法截图)
之后,稍等一会,便可以看到
这就表示这个 加载项安装成功了, 选择 “是” 继续。
如果看到这个错误, 则你需要把当前站点添加到 “可信任站点” 中
如果没有错误, 或者完成了上步,应该 会看到这个
单击 “是(Y)”继续。
看到了这个就表示成功了。
然后 点击 “工具”——“管理加载项”
出来这个,
可以在对话框中看到 Cenrool Class , 选中它 然后 单击 “详细信息(R)” 或者直接双击, 看到
(可以看到 它 安装的位置不是 System32,而是 Downloaded Program Files 下)
点击 “删除所有站点” (恩,不要怕) , 然后在点击 在 “在所有站点上允许(A)” , 之后 关闭。
然后,就可去支付宝? 还是不行啊~
截至目前为止(2009-06-14), 我是没有成功过(通过IE)
后来,用调试器继续分析,发现,
实际上 Vista 之后,MS 一改之前的安全策略,而使用了新的安全控件
而支付宝一向和MS合作要好(IE8的时候就是), 当然也使用了新的控件。
使用了新的控件,也就意味着前面做的那西没用了 (-_---!) (后面,说说新的控件)
回头有仔细看了一下调试器的JS,发现
Code
if(!isVista()) { //Not vista
var objstr='<object classid="clsid:127698e4-e730-4e5c-a2b1-21490a70c8a1" CODEBASE="'+urlXEnrollCab+'" onreadystatechange="javascript:if(this.readyState==4) cenroll=this"> </object>';
document.write(objstr);
}else{ //vista
var objstr='<object id="objCertEnroll" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09" onreadystatechange="javascript:if(this.readyState==4)cenroll=new XEnroll();"> </object>';
document.write(objstr);
}
function isVista()
{
if (navigator.userAgent.indexOf("NT") >= 0 && navigator.userAgent.substr(navigator.userAgent.indexOf("NT")+3, 1) >= 6)
return true;
else
return false;
}
看来只要使 骗过系统,让对方误以为 是 Vista之前的系统就可以继续使用老控件了~
但是 在网上看了半天,也没看到可以用的方法, 因为修改Windows注册表没用,Windows NT字符在注册表那些之前出来。
后来突然想到一个救军~~ 傲游
记得傲游设置里面可以自定义 UserAgent字符串, 打开看看, 没想到真的救军来了
在“高级选项”里 勾选 “自定义 UserAgent 字符串” ,然后在 “预定义模板” 中 选择 IE7
再把下边字符串中的 7.0 改成8.0 保存 重启
去支付宝试试, 通过顺利通过验证, 之后就可以再把那个设置关闭了就可以了
再说说新控件问题,在网上找到新控件的测试代码
Code
<html>
<head>
<title>Certificate Request test</title>
</head>
<body>
<object id="objCertEnrollClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object>
<script language="javascript">
function CreateRequest()
{
document.write("<br>Create Request");
try {
// Variables
var objCSP = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformation");
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")
// Initialize the csp object using the desired Cryptograhic Service Provider (CSP)
objCSP.InitializeFromName("Microsoft Enhanced Cryptographic Provider v1.0");
// Add this CSP object to the CSP collection object
objCSPs.Add(objCSP);
// Provide key container name, key length and key spec to the private key object
//objPrivateKey.ContainerName = "AlejaCMa";
objPrivateKey.Length = 1024;
objPrivateKey.KeySpec = 1; // AT_KEYEXCHANGE = 1
// Provide the CSP collection object (in this case containing only 1 CSP object)
// to the private key object
objPrivateKey.CspInformations = objCSPs;
// Initialize P10 based on private key
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);
// 1.3.6.1.5.5.7.3.3 Oid - Extension
//objExtensionTemplate.InitializeEncode("1.3.6.1.5.5.7.3.3");
//objRequest.X509Extensions.Add(objExtensionTemplate);
// DN related stuff
objDn.Encode("CN=alejacma", 0); // XCN_CERT_NAME_STR_NONE = 0
objRequest.Subject = objDn;
// Enroll
objEnroll.InitializeFromRequest(objRequest);
var pkcs10 = objEnroll.CreateRequest(3); // XCN_CRYPT_STRING_BASE64REQUESTHEADER = 3
document.write("<br>" + pkcs10);
document.write("<br>The end!");
}
catch (ex) {
document.write("<br>" + ex.description);
return false;
}
return true;
}
CreateRequest();
</script>
</body>
</html>
将代码保存到 .HTM 文件,然后打开,信息栏提示 使用 ActiveX 可能带来安全问题, 但却始终不能启动。。(恩是不能启动, 没有那一项)
自已一个IIS站点将其放入,并加入 信任站点中, 也不行, 还是无法开打
后来,看了一下 Windows帮助,又去微软官方看看, 想到是权限问题。
回来赶紧试试, 经过测试,发现, 只要在对应区域中,将 ActiveX里的 “对未标记为可安全执行脚本的 ActiveX控件初始化。。。” 选上提示。 就可以解决问题,(页面会有提示,是否允许交互, 选择是既可, 否的话就是禁用)
虽然可以用了, 但抱着激动心情,去支付宝上, 却。。。。。
不管用。。。。 唉。。。。。
注1: 想必有很多人看到网上的N多转载, 说是解决WIn7 问题, 但却不管用。 (虽然,现在我也十分怀疑,当初他们是怎么通过检测的, 当然也有可能,那个时候,在支付宝还没有升级到新控件的时候,或许可用,但现在一切未知了。。)
虽然不管用,但你已经做了,不过本文使用的是另一个方式,因此你需要把之前的改回去。
首先是文件, 用管理员模式打开 命令行提示符
然后输入
Cd c:\windows\system32 (如果是X64 ,则是 c:\Windows\SysWOW64)
Regsvr32 -u xenroll.dll
反注册之后,你就删掉那个文件了
接下来是注册表,实际上,这个问题不大, 但网上那些,却多出一个简直来, 不明白用途, 所以可以删了
注2:如果你已经不知道都对IE改了什么了, 你可以通过 在 IE “工具” ——“Internet 选项” ——“高级” 中
点击 还原高级设置 和 重置, 将浏览器回复。
注3: 虽然可以想我这里这么安装, 但也可以直接进入支付宝来安装。 因为 支付宝也提供了控件下载。不过这是我后期发现了, 没有测试