使用vs2005自动创建的.pfx数字证书默认有效期只有一年,并且“颁发者”、“颁发给”均为当前机器名和当前登陆用户名的组合,其实我们完全可以创建更友好的.pfx数字证书。
打开Microsoft .NET Framework 的SDK命令提示,按以下步骤操作:
1、创建一个自我签署的X.509证书(.cer)和一个.pvk私钥文件,用到makecert工具,命令如下:
makecert -r -n "CN=cncxz" -b 01/01/2005 -e 01/01/2018 -sv myselfName.pvk myselfName.cer
如下的命令会生成用于azuremgr.cloudapp.net这个域名SSL访问的,加密算法是2048位的,并指定存储位置的证明书:
makecert -r -n "CN=azuremgr.cloudapp.net" -b 01/01/2012 -e 01/01/2030 -a sha1 -len 2048 -ss CA -sr localmachine -sv AzureMgrTool.pvk AzureMgrTool.cer
按提示设置私钥密码(也可以不使用密码)即可在当前目录生成相关文件
2、利用X.509证书(.cer)创建发行者证书 (.spc),用到cert2spc工具,命令如下:
cert2spc myselfName.cer myselfName.spc
3、从.pvk和.spc格式转换成.pfx格式,用到pvkimprt工具,命令如下:
pvkimprt -pfx myselfName.spc myselfName.pvk
按提示操作可导出.pfx证书,若第1步设置了私钥密码,此处需要输入验证
4、在vs项目的ClickOnce清单签名的证书设置处点击“从文件选择”浏览定位到第3步导出的.pfx证书,此处需要验证第3步中设置的证书私钥密码。
=================================================
makecert工具和cert2spc工具.NET Framework自带,pvkimprt工具下载地址如下
http://download.microsoft.com/download/vba50/Utility/1.0/NT5/EN-US/pvkimprt.exe
makecert命令的使用方法:
命令格式:makecert [options] outputCertificateFile
outputCertificateFile
测试 X.509 证书要写入的 .cer 文件的名称。
选项 | 说明 |
---|---|
-n x509name |
指定主题的证书名称。此名称必须符合 X.500 标准。最简单的方法是在双引号中指定此名称,并加上前缀 CN=;例如,"CN=myName"。 |
-pe |
将所生成的私钥标记为可导出。这样可将私钥包括在证书中。 |
-sk keyname |
指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。 |
-sr location |
指定主题的证书存储位置。Location 可以是 currentuser(默认值)或 localmachine。 |
-ss store |
指定主题的证书存储名称,输出证书即存储在那里。 |
-# number |
指定一个介于 1 和 2,147,483,647 之间的序列号。默认值是由 Makecert.exe 生成的唯一值。 |
-$ authority |
指定证书的签名权限,必须设置为 commercial(对于商业软件发行者使用的证书)或 individual(对于个人软件发行者使用的证书)。 |
-? |
显示此工具的命令语法和基本选项列表。 |
-! |
显示此工具的命令语法和扩展选项列表。 |
选项 | 说明 |
---|---|
-a algorithm |
指定签名算法。必须是 md5(默认值)或 sha1。 |
-b mm/dd/yyyy |
指定有效期的开始时间。默认为证书的创建日期。 |
-cy certType |
指定证书类型。有效值是 end(对于最终实体)和 authority(对于证书颁发机构)。 |
-d name |
显示主题的名称。 |
-e mm/dd/yyyy |
指定有效期的结束时间。默认为 12/31/2039 11:59:59 GMT。 |
-eku oid[,oid] |
将用逗号分隔的增强型密钥用法对象标识符 (OID) 列表插入到证书中。 |
-h number |
指定此证书下面的树的最大高度。 |
-ic file |
指定颁发者的证书文件。 |
-ik keyName |
指定颁发者的密钥容器名称。 |
-iky keytype |
指定颁发者的密钥类型,必须是 signature、exchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。 |
-in name |
指定颁发者的证书公用名称。 |
-ip provider |
指定颁发者的 CryptoAPI 提供程序名称。 |
-ir location |
指定颁发者的证书存储位置。Location 可以是 currentuser(默认值)或 localmachine。 |
-is store |
指定颁发者的证书存储名称。 |
-iv pvkFile |
指定颁发者的 .pvk 私钥文件。 |
-iy pvkFile |
指定颁发者的 CryptoAPI 提供程序类型。 |
-l link |
到策略信息的链接(例如,一个 URL)。 |
-m number |
以月为单位指定证书有效期的持续时间。 |
-nscp |
包括 Netscape 客户端身份验证扩展。 |
-r |
创建自签署证书。 |
-sc file |
指定主题的证书文件。 |
-sky keytype |
指定主题的密钥类型,必须是 signature、exchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。 |
-sp provider |
指定主题的 CryptoAPI 提供程序名称。 |
-sv pvkFile |
指定主题的 .pvk 私钥文件。如果该文件不存在,系统将创建一个。 |
-sy type |
指定主题的 CryptoAPI 提供程序类型。 |
下面的命令创建了一个由默认测试根颁发的测试证书并将其写入 testCert.cer。
makecert testCert.cer
下面的命令创建了一个由默认测试根颁发的证书并将其保存到证书存储区。
makecert -ss testCertStore
下面的命令创建了一个由默认测试根颁发的证书并将其保存到证书存储区。它将证书显式地放入 currentuser 存储区。
makecert -ss testCertStore -sr currentuser
下面的命令使用主题的密钥容器和证书主题的 X.500 名称创建一个测试证书,并将其写入 textXYZ.cer。
makecert -sk XYZ -n "CN=XYZ Company" testXYZ.cer
下面的命令创建了一个由默认测试根颁发的证书和一个 .pvk 文件,并将此证书同时输出到存储区和该文件。
makecert -sv testCert.pvk -ss testCertStore testCert.cer
下面的命令创建了一个由默认测试根颁发的证书和一个密钥容器,并将此证书同时输出到存储区和该文件。
makecert -sk myTestKey -ss testCertStore testCert.cer
下面的命令创建一个自我签署的证书,指定使用者名称为“CN=XYZ Company”,指定有效期的起始和结束时间,将密钥放入 my 存储区,指定并交换密钥,并且使私钥可导出。
makecert -r -pe -n "CN=XYZ Company" -b 01/01/2005 -e 01/01/2010 -sky exchange -ss my
下面的命令创建了一些证书并将它们保存到存储区。第一个命令使用默认测试根创建了一个证书并将其保存到存储区。第二个命令使用新创建的证书创建了另一个证书,并将第二个证书保存到另一个存储区。
makecert -sk myTestKey -ss testCertStore makecert -is testCertStore -ss anotherTestStore
下面的命令创建了一些证书并将它们保存到存储区。第一个命令将证书保存到 my 存储区。第二个命令使用新创建的证书创建了另一个证书。因为 my 存储区中存在多个证书,所以第二个命令使用公用名称来标识第一个证书。
makecert -sk myTestKey -n "CN=XXZZYY" -ss my makecert -is my -in "XXZZYY" -ss anotherTestStore
下面的命令创建了一些证书并将它们保存到文件和存储区。第一个命令使用默认测试根创建了一个证书并将其保存到 my 存储区和一个文件。第二个命令使用新创建的 testCert.cer 证书创建了另一个证书。因为 my 存储区中存在多个证书,所以第二个命令使用证书文件名来唯一标识第一个证书。
makecert -sk myTestKey -n "CN=XXZZYY" -ss my testCert.cer makecert -is my -ic testCert.cer -ss anotherTestStore