Spiga

Win7 支付宝证书 安装记

2009-06-15 00:17 by G yc {Son of VB.NET}, 5331 visits, 网摘, 收藏, 编辑

 

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)

clip_image001

 

2、 然后浏览 http://www.myca.cn/myca/installRoot.asp (注3)

看到 证书安装失败

clip_image002

 

不用管这个, 点击确定。

然后, 注意到 IE 下边出现 的信息栏, 单击, 然后选择 “为此计算机上的所有用户安装此加载项。”

clip_image003

之后页面会自动刷新,然后 UAC会弹出, 选择 “是” (因为UAC是在安全桌面, 无法截图)

之后,稍等一会,便可以看到

clip_image004

 

这就表示这个 加载项安装成功了, 选择 “是” 继续。

clip_image005

如果看到这个错误, 则你需要把当前站点添加到 “可信任站点” 中

clip_image006

 

如果没有错误, 或者完成了上步,应该 会看到这个

clip_image007

单击 “是(Y)”继续。

clip_image008

 

看到了这个就表示成功了。

然后 点击 “工具”——“管理加载项”

clip_image009

 

出来这个,

clip_image010

 

可以在对话框中看到 Cenrool Class , 选中它 然后 单击 “详细信息(R)” 或者直接双击, 看到

clip_image011

 

(可以看到 它 安装的位置不是 System32,而是 Downloaded Program Files 下)

点击 “删除所有站点” (恩,不要怕) , 然后在点击 在 “在所有站点上允许(A)” , 之后 关闭。

然后,就可去支付宝? 还是不行啊~

截至目前为止(2009-06-14), 我是没有成功过(通过IE)

后来,用调试器继续分析,发现,

 

实际上 Vista 之后,MS 一改之前的安全策略,而使用了新的安全控件

clip_image012

 

而支付宝一向和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")+31>= 6)
        
return true;
    
else
        
return false;
}

 

看来只要使 骗过系统,让对方误以为 是 Vista之前的系统就可以继续使用老控件了~

但是 在网上看了半天,也没看到可以用的方法, 因为修改Windows注册表没用,Windows NT字符在注册表那些之前出来。

后来突然想到一个救军~~ 傲游

记得傲游设置里面可以自定义 UserAgent字符串, 打开看看, 没想到真的救军来了

在“高级选项”里 勾选 “自定义 UserAgent 字符串” ,然后在 “预定义模板” 中 选择 IE7

再把下边字符串中的 7.0 改成8.0 保存 重启

clip_image013

 

去支付宝试试, 通过顺利通过验证, 之后就可以再把那个设置关闭了就可以了

 


 

 

再说说新控件问题,在网上找到新控件的测试代码

 

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控件初始化。。。” 选上提示。 就可以解决问题,(页面会有提示,是否允许交互, 选择是既可, 否的话就是禁用)

clip_image014

虽然可以用了, 但抱着激动心情,去支付宝上, 却。。。。。

不管用。。。。 唉。。。。。

 


 

 

注1: 想必有很多人看到网上的N多转载, 说是解决WIn7 问题, 但却不管用。 (虽然,现在我也十分怀疑,当初他们是怎么通过检测的, 当然也有可能,那个时候,在支付宝还没有升级到新控件的时候,或许可用,但现在一切未知了。。)

虽然不管用,但你已经做了,不过本文使用的是另一个方式,因此你需要把之前的改回去。

首先是文件, 用管理员模式打开 命令行提示符

然后输入

Cd c:\windows\system32 (如果是X64 ,则是 c:\Windows\SysWOW64)

Regsvr32 -u xenroll.dll

反注册之后,你就删掉那个文件了

接下来是注册表,实际上,这个问题不大, 但网上那些,却多出一个简直来, 不明白用途, 所以可以删了

 

 

注2:如果你已经不知道都对IE改了什么了, 你可以通过 在 IE “工具” ——“Internet 选项” ——“高级” 中

点击 还原高级设置 和 重置, 将浏览器回复。

clip_image015

 

 

注3: 虽然可以想我这里这么安装, 但也可以直接进入支付宝来安装。 因为 支付宝也提供了控件下载。不过这是我后期发现了, 没有测试

0
0
(请您对文章做出评价)
« 上一篇:(翻译)《介绍 GENEVA Beta 1 白皮书》(3)
» 下一篇:WCF 部署问题 小总结 (HTTP 不能注册的解决方法 和 部署Bat脚本)
Add your comment

12 条回复

  1. #1楼 真的,这家伙很懒.      2009-06-15 00:55
    支付宝的ActiveX已完全兼容win7了
      回复  引用  查看    
  2. #2楼 斯克迪亚      2009-06-15 03:13
    --引用--------------------------------------------------
    真的,这家伙很懒.: 支付宝的ActiveX已完全兼容win7了
    --------------------------------------------------------
    我们现在是IE8~我用支付宝都是通过虚拟机XP的IE6上~
      回复  引用  查看    
  3. #3楼 路过~~~~~~~~[未注册用户]2009-06-15 04:26
    博主从来不看新闻的嘛?
      回复  引用    
  4. #4楼 木鱼      2009-06-15 08:41
    首先是支付宝已经支持win7了~
    就算是在之前,支付宝支持win7也只需要导入注册表-复制dll-注册dll就可以了,不用这么麻烦的
      回复  引用  查看    
  5. #5楼[楼主] G yc {Son of VB.NET}      2009-06-15 09:43
    @真的,这家伙很懒.
    @木鱼

    我是安装完才遇到这问题的, 证明现在没哟完全支持

    而且,我说的是证书,不是登录的密码控件

    如果是密码控件, 那已经可以支持了。只要去下载主页上那个 IE控件,就OK。
    但证书还是不行。 网上那些方法, 我试了,不管用。


    @斯克迪亚:
    很可惜, 这个老机器,还不支持XP虚拟化
    另外,内存也只有可怜的1G,硬盘还是并口的40G, 唉
      回复  引用  查看    
  6. #6楼 c b       2009-06-15 11:48
    没看懂博主的意思,搞不清楚为什么会这么麻烦。
    我装的是RC1, 然后只要把支付宝的网站和淘宝的网站添加到信任的网站列表就好了啊。就可以正常的安装支付宝控件,然后在淘宝上交易买东西支付都没有问题的啊。那个时候淘宝还没官方宣布支持win7呢
    真的理解不了
      回复  引用  查看    
  7. #7楼 <∩扫地僧∩>      2009-06-15 12:44
    博主本意是好的,实现方法有待商榷。我们早就是win7+ie8了!把权限保护active控件都允许,装上后再恢复就ok了!
      回复  引用  查看    
  8. #8楼[楼主] G yc {Son of VB.NET}      2009-06-15 13:06
    @c b
    @&lt;∩扫地僧∩&gt;

    呵呵, 我也郁闷啊~
    装的 Win 7 Build 7100 中文版(非英文版+中文包形式,光盘本身就是中文的)

    但在支付宝添加证书的时候,却报错了。苦了很久。。

    也许也可能是新问题, 反正你要去搜, Win7 支付宝 能看到一堆结果。

    信任站点也添加了,但也不行,实际上,新版的IE控件 安装后,就会自动添加。

    网上那些方法,有的说成功,有的说不行的(我就是其一)。

    回头在看看证书问题, 从WIn XP SP3到 最新的WIn7, 都有错误
    去一个买证书的网站,问问,那个技术支持对我说, WIn7不支持数字证书 。。。

    个别的差异了,IE的保护机制和一些隐藏的注册表项。

      回复  引用  查看    
  9. #9楼 pwy[未注册用户]2009-06-15 13:07
    哥哥。。。。没那么夸张吧!!!!我也是Win7 rc,直接下一个专门的版本就好,淘宝的faq里面有啊。。
      回复  引用    
  10. #10楼[楼主] G yc {Son of VB.NET}      2009-06-15 13:12
    楼上的是说这个吗?
    http://blog.alipay.com/638.html

    试过了,不管用。。。
    问题依旧。。
      回复  引用  查看    
  11. #11楼 木鱼      2009-06-16 11:28
    @G yc {Son of VB.NET}

    登陆控件那个好解决,我说的就是证书。我弄过一个程序装系统运行一下就可以直接恢复证书了,用的也就是修改注册表、复制dll、注册dll而已,完全不需要其他操作。
      回复  引用  查看    
  12. #12楼[楼主] G yc {Son of VB.NET}      2009-06-16 12:13
    @木鱼
    什么程序?
    可以拿出来分享吗?

    注册表那些,我用了,但不起作用。
      回复  引用  查看