最近写了个IE用的ActiveX,公司内部使用(很难想象2021了还需要用IE)。
为避免手动降低IE安全设置,对控件进行了签名。
查了一些资料,汇总一下,以后万一再用到可以在参考。
控件使用VS C#开发。
如果装过 Windows SDK,Kits 或 VS 可以在以下目录中找到签名相关工具
c:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
c:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\Bin
c:\Program Files (x86)\Windows Kits\8.0\bin\
主要使用的工具
makecert.exe
cert2spc.exe
pvk2pfx.exe
signtool.exe
1 创建自签名根证书
makecert -n "CN=MyRoot" -r -sv CARoot.pvk CARoot.cer
(公司内部有根证书服务器,此步省略)
2 使用根证书签发个人证书
makecert -n "CN=zzy.my,E=zzy@zzy.my" -iv CARoot.pvk -ic CARoot.cer -sv MySoft.pvk MySoft.cer
(AD 中可以)
3 利���个人证书cer 生成SPC(软件发行证书)
cert2spc MySoft.cer MySoft.spc
(到这里其实已经可以利用signtool签名应用了)
4 私钥&公钥 pvk&spc 合并成 PFX
pvk2pfx -pvk MySoft.pvk -spc MySoft.spc -pfx MySoft.pfx -po password
这一步是为了可以导入电脑,以后签名时也不用再找spc文件,直接在"存储区"选择即可
5 signtool.exe signwizard 签名控件
时间戳服务器网上有很多
推荐一个 http://time.certum.pl (地址最短)
备注
pvk用于保存私钥,创建和使用时需要密码
spc用于保存公钥
-------------
makecert:
CN=公司名称
E=Maill地址
O=组织名称
OU=组织单位
C=国家
S=省份
P=县城
-sky exchange 交互证书,用于安全通信
-sky signature 签名证书用于签发证书或二进制文件
---------- 以上 ----------
自签名证书是免费,但客户端IE默认会拒绝(网址加入信任列表也没用),必须手动修改安全策略
将下载未签名的 ActiveX 控件改为 启用或提示。(自签名不被信任等于未签名)
![](/blog/image.axd?picture=/2021/20210210223810.png)
解决IE安全问题
◆ 淘宝购买代码签名证书(费用200到5000不等)
◆ 把自签名根证书导入客户端的 "受信任的根证书颁发机构"。
(一两台好弄,多了员工都不配合)
◆ 企业有域环境,且客户端都加入域,可用AD证书服务颁发代码签名证书
还好环境是在企业内部,有AD证书服务
在证书颁发机构->证书模板->新建->要颁发的证书模板->启用代码签名
![](/blog/image.axd?picture=/2021/20210210230858.png)
启用后可在Web注册(安装了证书颁发机构Web注册角色), 也可以在个人证书管理器中注册
Web注册
![](/blog/image.axd?picture=/2021/20210210232436.png)
证书管理 - 仅限当前用户
![](/blog/image.axd?picture=/2021/20210210234217.png)
选择 "代码签名"(为了可以导出密钥, 我新复制模板), 并在点开详细信息填写属性.
![](/blog/image.axd?picture=/2021/20210210234031.png)
签名后存储在 证书-当前用户 - 个人证书中
![](/blog/image.axd?picture=/2021/20210210233038.png)
使用 signtool 可直接在存储区中选择
![](/blog/image.axd?picture=/2021/20210211005313.png)