近日,需要为一个Silverlight项目添加签名证书(注意:如果单是为了测试,在VS项目->属性->签名,有个创建测试证书的功能,虽然这个证书的有效期是一年,是一年吧:(,忘记了。。。)。因为我的这个是需要部署到客户那边的,即使是测试的,测试期限也要长点啊,SO...
在网上找了很多例子,但都不详细,或者说不符合我的需求。最后,综合网上的资料,鄙人整理了如下。
本机装的是VS2012,以下所有工具都可在C:Program Files (x86)Microsoft SDKsWindowsv7.1ABin目录找到。
第一步,打开CMD或者VS2012的工具命令
我用的是后者,如果是用CMD的,可直接把makecert.exe、cert2spc.exe等复制到C:WindowsSystem32目录,这样的话输入命令时就不需要专门导航到对应的目录了。
第二步,创建 X.509 证书
v7.1ABin目录里的makecert.exe为证书创建工具。
证书创建工具生成仅用于测试目的的 X.509 证书。它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。
此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。
创建证书时会提示要求证书的私钥密码(Subject Key,两个密码输入框),并会在生成cer文件是再次要求输入密码(一个输入框),最后提示Succeeded,并在C:Program Files (x86)Microsoft Visual Studio 11.0(我的是x64位系统,不同的系统,目录路径可能有所区别)目录下生成两个文件。
参考:http://msdn.microsoft.com/zh-cn/library/bfsktky3(v=vs.110).aspx
命令:
makecert -r -n "CN=广州软件有限公司" -b 01/01/2014 -e 12/31/2100 -sv IvanSetupKey.pvk IvanSetupKey.cer
第三步,创建发行者证书
cert2spc.exe发行者证书测试工具
发行者证书测试工具通过一个或多个 X.509 证书创建发行者证书 (SPC)。Cert2spc.exe 仅用于测试目的。可以从证书颁发机构(如 VeriSign 或 Thawte)获得有效的 SPC。
参考:http://msdn.microsoft.com/zh-cn/library/f657tk8f(v=vs.110).aspx
生成发行者证书时,不要求输入私钥密码,提示成功后,在IvanSetupKey.cer证书所在目录,可以看到多了一个IvanSetupKey.spc文件
命令:
cert2spc IvanSetupKey.cer IvanSetupKey.spc
第四步,导出证书文件
pvkimprt.exe是证书导出工具。需要从微软网站下载:http://download.microsoft.com/download/vba50/Utility/1.0/NT5/EN-US/pvkimprt.exe。
注意:下载之后的pvkimprt.exe是个压缩文件!需要我们双击解压得到pvkimprt.exe才是我们想要的!运行解压得到的pvkimprt.exe,会提示安装,安装成功后就可正常使用命令了。
证书导出工具用于将.spc和.pvk文件导出为pfx证书文件。
导出时,会提示创建证书的密码
输入正确的密码后,出现导出向导界面,点击下一步,选择“是,导出密钥”,然后点击下一步,
出现证书类型选择界面,选择“个人信息交换 - PKCS #12(.PFX)(P)”(只有这一种可选,并且其下面的选项均不选择),再点击下一步,
出现私钥保护密码选项,输入密码,然后点击下一步,在文本框中输入要生成的文件名(一般与证书名称一致,最后得到的文件名后缀是.pvk),点击下一步
显示完成窗口,并显示导出证书的信息。
命令:
pvkimprt -pfx IvanSetupKey.spc IvanSetupKey.pvk
第五步,收工阶段,把签名添加到项目中
在项目属性中,选择“签名”选项卡
点击“从文件选择”,然后选择生成的.pfx文件
选择了.pfx文件后,会提使输入私钥保护密码,输入正确的私钥保护密码后,即可添加到项目中。
现在再看证书的有效期,是不是延长到2100年了(^o^)/~
补充:
我在导入证书之后,在浏览器打开程序,点击安装OOB模式时,会弹出黄色警报提示。好吧,继续解决此问题~紧接上面的步骤,打开项目属性里的签名之后,选择“更多详细信息”,选择“常规”->“安装证书”,在下一步中,选择”将所有的证书放入下列存储“,并浏览选择受信任的机构,按“确定”、“确定”。Ok!
本文参考自Muse的文章:http://www.cnblogs.com/yuxs/archive/2009/06/08/1498592.html
补充:如果是别的电脑打开该工程时,会出现类似以下提示:
错误 45 无法导入以下密钥文件: HZAnalysisIKey.pfx。该密钥文件可能受密码保护。若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 CSP: VS_KEY_F5ABFB8972AFDF7B LIMS.Analysis (LIMS.AnalysisLIMS.Analysis)
这时,可采用下面的方法:
1、打开Visual Studio 命令提示
2、cd命令定位到当前密钥文件xxxx.pfx的目录,如:cd /d "D:WorkGit Project CodeLIMSLIMS.AnalysisLIMS.Analysis"
3、输入命令: sn -i [CertName].pfx [VS_KEY], 例如: sn -i HZAnalysisIKey.pfx VS_KEY_F5ABFB8972AFDF7B
4、.输入密码pfx密码