ACTIVE制作数字签名

来源:互联网 发布:em算法实战 编辑:程序博客网 时间:2024/05/17 05:14
首先要有工具包,包括以下几个软件:makecert.exe 制作cer格式的证书, 即X.509证书,同时可以创建私钥cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书signcode.exe 将证书签署到ocx上去chktrust.exe 检查签署证书后的ocx是否正确还有一个certmgr.exe,是管理证书用的。可以从这里面导出root.cer来,网上很多文章写到这个证书,但是在VC的安装盘中却找不到。其实,没有也没关系的。这几个软件可以从VC的安装盘中找到。 下面是具体的步骤:1、创建一个自己的证书文件:makecert /sv "Record.PVK" /n "CN=公司名称,E=email,O=作者" dream.cer这里,Record.PVK表示新创建的私人密钥保存文件名 DreamCaptial是你想显示的公司名 dream.cer是你创建最后的证书文件名这些根据你自己的要求填写,0HRIX教.nMel软hl(网最后得到Record.PVK和dream.cer两个文件。其中,mj!HA络iI1B运行过程中需要输入私人密钥的保护密码,一定要输入一致,不要出错。 2、转换cer格式为spc格式(可以省略)cert2spc dream.cer dream.spc得到dream.spc文件。3、给ocx进行签名运行signcode,命令行的我没有试验通过,我是通过界面实现的。signcode运行后会出现数字签名向导,首先选择你要签名的ocx,下一步后会出现签名选项,一种是典型,一种是自定义。选择自定义,教络i管kn*l,06;这样才能从文件选择证书,选择前面制作的dream.spc,再下一步是选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步,填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明,再下一步是加盖时间戳,我不会,直接下一步就完成了。4、用chktrust检查是否正确chktrust -v RecordProj.ocx就这样,得到了一个测试证书,恩,虽然只是一个测试证书,但至少保证这个ocx在ie浏览的时候能够弹出来一个窗口,问你是否安装,而不是直接禁止了。1、在你的机器上数字签名所需要的工具,叫什么名字不记得了,只晓得是个ZIP文件,叫codesigningx86,是WINDOWS下面使用的,正常解开后会有以下文件: ============== cabarc.exe cert2spc.exe chktrust.exe makecat.exe makecert.exe (必须) makectl.exe setreg.exe signcode.exe (必须) ================ 以上的可以的微软的站点下载 以上根据需要来确定采用哪些工具,这里我采用了makecert.exe 来制作认证的证书,signcode.来进行数字签名 这时会在你的目录下生成个oranje.pvk和oranje.cer文件,打开.cer文件可以看到是证书信息 颁发给:王成 颁发者:Rooe Agenct 有效起始日期 2003-11-29 到 2040-1-1 好了,有了这个证书可以进一步搞你的DLL或CAB等的认证了 2、进入DOS状态,进入改目录 输入:makecert -sv oranje.pvk -n "CN=王成,E=homki@163.com,O=王成" oranje.cer 这个是制作证书 -sv是制作加密的文件(好象是的),CN是公司 E=EMail O=认证公司的名称 oranje.cer是生成文件的名称,好象都是以.cer为后缀的 这时制作的证书是没有任何认证公司认证的,听说认证一年需要好几百美金,俺没钱,所以只好自己做个使用了,功能都一样 3、运行Signcode.exe 出现一个数字签名向导 下一步 选择需要签名的文件(dll.ocx.cab等) 下一步 这里选择了自定义 下一步 选择签名证书 从文件选择 选择刚才做好的oranje.cer 下一步 私钥 磁盘上的私钥文件 点浏览选择刚才做好的oranje.pvk 下一步 输入密码 下一步 选择算法,这里我选择的是sha1 下一步 配置证书路径 这里我选择了“证书路径中所有证书,包括根证书”就是默认的 下一步 描述:输入安装证书时提示的文字,随便输入,这里我输入“公文编辑器” WEB位置是点了你输入的东西的链接,我这里输入http://www.cn2cn.com —> 下一步 时间 没做改动 下一步 完成 4、恭喜你,证书制作完毕,马上配置你的CAB或DLL等试试看,第一次运行会出现安装你的证书,以后再运行就不需要了,也不会出现“不安全的ACTIVEX,不让安装”等提示了 5、调试及运行环境 windows 2000 P IIS 5如何给activeX加数字签名 首先要有工具包,包括以下几个软件: (以下软件在Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin都可以找到) makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥 cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书 signcode.exe 将证书签署到ocx上去 chktrust.exe 检查签署证书后的ocx是否正确 还有一个certmgr.exe,是管理证书用的。可以从这里面导出root.cer来, 网上很多文章写到这个证书,但是在VC的安装盘中却找不到。其实,没 有也没关系的。这几个软件可以从VC的安装盘中找到。 下面是具体的步骤: 1、创建一个自己的证书文件: makecert -sk "photoup.PVK" -ss myName -n "CN=公司名称,E=email,O=作者" photoup.cer 这里,photoup.PVK表示新创建的私人密钥保存文件名 ss-主题的证书存储名称 photoup.cer是你创建最后的证书文件名 这些根据你自己的要求填写,最后得到Record.PVK和dream.cer两个文件。 其中,运行过程中需要输入私人密钥的保护密码,一定要输入一致,不要 出错。 2、转换cer格式为spc格式 cert2spc dream.cer dream.spc 得到dream.spc文件。 3、给ocx进行签名 运行signcode,命令行的我没有试验通过,我是通过界面实现的。 signcode运行后会出现数字签名向导,首先选择你要签名的ocx, 下一步后会出现签名选项,一种是典型,一种是自定义。选择自定义, 这样才能从文件选择证书,选择前面制作的dream.spc,再下一步是 选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散 列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步, 填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明, 再下一步是加盖时间戳,填入http://ti****mp.verisign.com/scripts/timstamp.dll(免费的),完成。 4、用chktrust检查是否正确 chktrust -v RecordProj.ocx chktrust -v 就这样,得到了一个测试证书,恩,虽然只是一个测试证书,但至 少保证这个ocx在ie浏览的时候能够弹出来一个窗口,问你是否安装, 而不是直接禁止了。了N久,找到制作签名的过程。下午试过,可以通过。好使。哈哈。。。整理一下~~~ 制作签名的工具软件:(这个装了VS的话。全部工具都有了。呵~~~偶的VS.net2002的都有。) 1、makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥 2、cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书 3、signcode.exe 将证书签署到ocx上去 4、chktrust.exe 检查签署证书后的ocx是否正确 还有一个certmgr.exe,是管理证书用的。可以从这里面导出root.cer来。(这个倒还没有用,没有多大的影响。) 签名软件可以对dll、ocx以及VB的打包向导的.cab 文件进行签名 1、创建一个自己的证书文件: (1) makecert /sv "Record.PVK" /n "CN=ZqbaSoft" test.cer 这里,Record.PVK表示新创建的私人密钥保存文件名,ZqbaSoft是你想显示的公司名,test.cer是你创建最后的证书文件名。最后得到Record.PVK和test.cer两个文件。其中,运行过程中需要输入私人密钥的保护密码,一定要输入一致,不要出错。 (2) a)建立自己的根证书: makecert -sk "Record.PVK" -ss myName -n "CN=Zqba.com,E=zqba@zqba.com,O=XDK" test.cer sk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置; 如果你需要导出私钥文件,请不要使用sk,而换作sv,例:makecert -ss myName -n "CN=Zqba.com" -sv c:/Record.PVK -r c:/test.cer b)建立自根证书授权的子证书: makecert -sk "myPK" -is myName -n "CN=公Zqba.com" -$ commercial -ic c:/test.cer c:/xdk.cer sk-表示主题的密钥容器位置,is-颁发者的证书存储名称, n-证书颁发对象,ic-颁发者的证书存储位置,-$-授权范围(用于代码签名); 2、使用Cert2Spc生成spc发行者证书(转换cer格式为spc格式,可以省略): cert2spc c:/xdk.cer c:/xdk.spc 3、给ocx或cab包进行签名 运行signcode,命令行的我没有试验通过,我是通过界面实现的。signcode运行后会出现数字签名向导,首先选择你要签名的ocx,下一步后会出现签名选项,一种是典型,一种是自定义。选择自定义,这样才能从文件选择证书,选择前面制作的xdk.spc,再下一步是选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步,填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明,再下一步是加盖时间戳,直接下一步就完成了。 4、用chktrust检查是否正确 chktrust -v test.cab 把这个CAB文件放到你的服务器上,用下列代码说明你的codebase,就会自动下载了。 就这样,得到了一个测试证书,虽然只是一个测试证书,但至少保证这个ocx在ie浏览的时候能够弹出来一个窗口,问你是否安装,而不是直接禁止了。 在一下午的测试中发现,在xp SP2系统下,弹出安装,就算是点确定都是不可以下载,XP还会自动屏蔽的。在win2K,VB6,vs.net2002下调试通过。 总结一下,在命令行下,也就是四个步骤: 1、makecert /sv "Record.PVK" /n "CN=ZqbaSoft" test.cer 2、makecert -sk "Record.PVK" -ss myName -n "CN=公司名称,E=email,O=作者" test.cer 3、makecert -sk "myPK" -is myName -n "CN=公司名称" -$ commercial -ic c:/test.cer c:/31.cer 4、cert2spc c:/31.cer c:/31.spc 运行signcode,按向导生成就行了。 备:^_^ makecert,MS如是说:http://msdn2.microsoft.com/zh-cn/library/bfsktky3.aspx cert2spc ,MS如是说:http://msdn2.microsoft.com/zh-cn/library/f657tk8f.aspx signcode,MS如是说:http://msdn2.microsoft.com/zh-cn/library/9sh96ycy.aspx 各工具的详细使用,可以上MS的网址查。^_^Q: 我写好了一个ActiveX,如何发布到网页上? A: 首先需要一个你有密码的安全证书,需要申请购买。 假设这里是Test.spc和Test.pvk。 其次,假设你的ActiveX文件叫Test.ocx 写一个安装文件Test.inf # filename: test.inf [version] signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] test.ocx=test.ocx [test.ocx] file-win32-x86=thiscab clsid={12342234-3234-4234-5234-623472348234}#工程idl文件中最后一个GUID FileVersion=1,0,0,1 #工程 资源文件中VS_VERSION_INFO的 ProductVersion RegisterServer=yes DestDir=11 #安装路径: C:/Windows/System32/ 写一个打包描述文件Test.ddf ; filename: Test.ddf .OPTION EXPLICIT .Set CompressionType=MSZIP .Set UniqueFiles="off" .Set Cabinet=on .Set DiskDirectoryTemplate=CDROM .Set MaxCabinetSize=0 .Set ReservePerCabinetSize=6144 ; 预留证书空间 .Set FolderFileCountThreshold=0 .Set DiskDirectory1=C:/ .Set CabinetName1=Test.cab ; 压缩文件名 ;FileList Test.inf Test.ocx 使用微软提供的makecab.exe,制作cab文件 makecab /f Test.ddf 使用微软提供的signcode.exe,签名cab文件 在签名选项中选"自定义",然后"从文件区选择"Test.spc,然后私密文件选Test.pvk,输入密码,其他选项任意,时间戳使用: http://ti****mp.verisign.com/scripts/timstamp.dll 就可以了。 然后在页面中使用: 以后版本升级,直接修改 资源文件 中的 VS_VERSION_INFO 中的 ProductVersion,然后修改上述步骤中的版本信息,即可自动升级。[version] ;区域设置 signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] ;该项会指明该安装包中有哪些项,这里说明包中有ActiveX.ocx、msvcr80.dll、mfc80u.dll、msvcp80.dll 四个项 ;这里一般会使用文件名和项名相同的方法,主要是便于维护 ActiveX.ocx=ActiveX.ocx msvcr80.dll=msvcr80.dll mfc80u.dll=mfc80u.dll msvcp80.dll=msvcp80.dll [ActiveX.ocx] ;这就是Activex控件文件了 file-win32-x86=thiscab ;表示所需要的这个文件就在当前的安装包中,file-win32-x86表示该文件是一个win32系统下的文件 clsid={A3B4C60F-24A7-40E8-A06B-1A5EFE5F0A43} ;这里是这个安装包的GUID RegisterServer=yes ;说明这个控件是需要注册的, ;一般情况下只有编写的文件是需要注册的,运行库文件和系统中可能存在的DLL文件是不用注册的,如MFC70.dll等 FileVersion=1,0,0,1 ;这个文件的版本,注意要用逗号隔开 [msvcr80.dll] ;这是ocx控件的第一个依赖文件,有的地方说明依赖文件必须按照依赖顺序安装,可以用"所剩dll都依赖的文件最先安装”的规则来进行,但是我并没有在MSDN上看到什么地方有很明确的说明,并且在我自己的测试中也没有发现有关顺序的问题,并且很多地方都是将ocx控件写在最前面的,但是ocx文件是最依赖其他文件的,貌似按顺序写的做法有点“迷信” FileVersion=8,00,50727,42 ;这里是该dll文件的版本,这里注意下,这个版本可以在文件属性的版本选项卡中看到,不知道为什么这里显示的版本号有时会比最外面显示的版本号多一个0,注意,复制到inf文件后要将点分隔符改成逗号分隔符 hook=mfc80installer ;这个hook是个保留字,说明该项目被挂接到哪里,如果有则表示被挂接到目标项,hook不是一个必填项,这里表示该文件将被挂接到mfc80installer项 [mfc80u.dll] FileVersion=8,00,50727,42 hook=mfc80installer [msvcp80.dll] FileVersion=8,00,50727,42 hook=mfc80installer ;上面两项都跟[msvcr80.dll]一样,这里就不解释了 [mfc80installer] ;挂接项 file-win32-x86=http://192.168.1.117/helloactivex/mfc80.cab ;这里表示这个被挂接的文件的位置在一个地址 run=%EXTRACT_DIR%vcredist_x86.exe ;这里表示从这个地址下载到cab包后执行包里面的vcredist_x86.exe文件,%EXTRACT_DIR%表示下载后的解压目录 上面有一点没有说明白,就是“为什么会出现hook这个东西?”,很多的inf文件是这样写的 [Add.Code] msvcr80.dll=msvcr80.dll mfc80u.dll=mfc80u.dll msvcp80.dll=msvcp80.dll ActiveX.ocx=ActiveX.ocx [msvcr80.dll] file-win32-x86=thiscab ;该文件在当前安装包中 FileVersion=8,00,50727,42 RegisterServer=no ;不需要注册 destdir=11 ;该文件将被安装到系统所在目录的system32下