A. 如何获取数字证书(x509Certificate)中的指纹算法
创建X509证书方法较多,在Windows 环境下大致总结了几中办法,
1) 通过CA获取证书,
2) 通过微软提供的makecert 工具得到测试证书
3) 编程的方法创建,.Net提供了 X509Certificate2 类,该类可以用于创建证书,但只能从RawData中创建,创建后无法修改除FriendlyName以外的任何属性。
我在互联网上找了很久,始终没有找到完全通过程序创建自定义的证书的方法。后来想了一个折中办法,就是用程序调用 makecert.exe 先生成一个证书,证书的一些参数如Subject,有效期,序列号等可以通过参数传入,然后把生成的证书文件读到Rawdata中,得到X509Certificate2 类型的证书对象。当然这种方法确实比较笨,必须要依赖外部进程。等后面有时间的话,我还是想按照X509 V3 标准,自己创建RawData,然后生成证书,这样应该是比较灵活的做法。不知道网友们有没有什么更好的方法来创建一个自定义的证书。
通过 makecert.exe 创建X509证书的代码如下,供大家参考
static object semObj = new object();
/// <summary>
/// 自定义的证书信息
/// </summary>
public class T_CertInfo
{
public String FriendlyName;
public String Subject;
public DateTime BeginDate;
public DateTime EndDate;
public int SerialNumber;
}
/// <summary>
/// 生成X509证书
/// </summary>
/// <param name="makecrtPath">makecert进程的目录</param>
/// <param name="crtPath">证书文件临时目录</param>
/// <param name="certInfo">证书信息</param>
/// <returns></returns>
public static X509Certificate2 CreateCertificate(String makecrtPath, String crtPath,
T_CertInfo certInfo)
{
Debug.Assert(certInfo != null);
Debug.Assert(certInfo.Subject != null);
string MakeCert = makecrtPath + "makecert.exe";
string fileName = crtPath + "cer";
string userName = Guid.NewGuid().ToString();
StringBuilder arguments = new StringBuilder();
arguments.AppendFormat("-r -n \"{0}\" -ss my -sr currentuser -sky exchange ",
certInfo.Subject);
if (certInfo.SerialNumber > 0)
{
arguments.AppendFormat("-# {0} ", certInfo.SerialNumber);
}
arguments.AppendFormat("-b {0} ", certInfo.BeginDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("-e {0} ", certInfo.EndDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("\"{0}\"", fileName);
B. 如何用makecert生成数字证书!
证书创建工具 (Makecert.exe)
.NET Framework 2.0
其他版本
24(共 31)对本文的评价是有帮助 - 评价此主题
证书创建工具生成仅用于测试目的的 X.509 证书。它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。
Makecert.exe 包含基本选项和扩展选项。基本选项是最常用于创建证书的选项。扩展选项提供更多的灵活性。
一定不要将此工具生成的证书私钥存储在 .snk 文件中。如果需要存储私钥,则应使用密钥容器。有关如何在密钥容器中存储私钥的更多信息,请参见如何:将非对称密钥存储在密钥容器中。
警告
应使用证书存储区来安全地存储证书。此工具使用的 .snk 文件以不受保护的方式存储私钥。创建或导入 .snk 文件时,在使用期间应注意保证其安全,并在使用后将其移除。
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(对于商业软件发行者使用的证书)或 indivial(对于个人软件发行者使用的证书)。
-?
显示此工具的命令语法和基本选项列表。
-!
显示此工具的命令语法和扩展选项列表。
扩展选项
选项
说明
-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
请参见
参考
.NET Framework 工具
发行者证书测试工具 (Cert2spc.exe)
SDK 命令提示
C. makecert 生成的公钥怎样用于加密
天威诚信数字证书助手 1.5
软件详细信息
1、软件小巧精干,支持对各类型文件加密 2、免费申请使用数字证书,文件信息安全有保证 3、不用记忆复杂的用户名和密码,只需轻点一下,防止密码被盗造成文件泄密 4、利用加密证书实现文档远程加密传递,加密文件安全分享 5、免除繁琐操作,一次性批量配置邮件证书 6、绿色软件,没有任何恶意插件,安装卸载方便具体介绍:数字证书技术作为可靠安全技术广泛应用于金融、电子商务等领域。本软件依托第三方数字认证中心(天威诚信)将高安全级别的数字证书免费发放给网友使用,供网友快速安全加密文件,免除记忆用户名和密码的烦恼。证书助手的背后有一支专业的团队进行研发,我们可以及时将客户宝贵意见变为现实,希望大家不断关注。如果您想了解更多信息(防范假冒网站、邮件证书等),请访问天威诚信官方
D. 如何制作和应用数字签名证书
需要准备的工具:makecert.exe、cert2spc.exe、pvk2pfx.exe、signtool.exe。
在MS的SDK6.0中有个证书生成工具makecert.exe, 你可以使用这个工具来生成测试用的证书。
第一步,生成一个自签名的根证书(issuer,签发者)。
>makecert -n "CN=Root" -r -sv RootIssuer.pvk RootIssuer.cer
这个时候,会弹出提示框,首先给RootIssuer.pvk文件设置私钥保护口令;
然后,再次输入这个口令用私钥(在RootIssuer.pvk文件中)来给公钥(在RootIssuer.cer文件中)加密。
第二步,使用这个证书签发一个子证书(使用者,subject)。
>makecert -n "CN=Child" -iv RootIssuer.pvk -ic RootIssuer.cer -sv ChildSubject.pvk ChildSubject.cer
此时,会弹出提示框先给这个子证书的私钥文件ChildSubject.pvk设置保护口令;
然后,输入这个子证书的私钥(在ChildSubject.pvk中)口令来保护子证书的公钥(在ChildSubject.cer中)。
接下来会提示输入根证书私钥(在RootIssuer.pvk中)口令来签发整个子证书(公钥和用户信息)。
如果你还要签发更多的子证书,类似的,使用这个证书来签发再下层的证书,前提是ChildSubject证书也可以用于签发(作为Issuer)用途。
备注:
(1)如果你需要一个交互证书,用于安全通信,那么,加入选项 -sky exchange;
(2)如果你需要一个签名证书来签发证书或者二进制文件,那么,加入选项 -sky signature.
(3)如果你需要一个客户端证书来标志你的身份,或者个人信息保护(电子邮件),那么,选项-n 中的E字段是不可缺少的。
举例:-n "CN=公司名称, E=E-MAIL地址, O=组织名称, OU=组织单位, C=国家, S=省份(州), P=县城"
其他辅助工具:
1) 公钥证书格式转换成SPC。 cert2spc.exe
>cert2spc TestRoot.cer TestRoot.spc
.spc 意思是 软件发布者证书(Software Pulisher Cerificate).
2) 将公钥证书和私钥合并成一个PFX格式的证书文件。pvk2pfx.exe
>pvk2pfx -pvk TestRoot.pvk -spc TestRoot.spc -pfx TestRoot.pfx
输入TestRoot.pvk的保护口令来合并.pvk和.spc文件,如果你不设置即将合并出来的TestRoot.pfx的保护口令的话,这个保护口令和输入文件TestRoot.pvk的保护口令一样。(备注:直接从cer文件也可以,不一定要得到SPC文件).
3) 签名工具。signtool.exe
二进制文件数字签名.为了保证二进制文件的完整性,数字签名是一个好的方法。
以下命令启动一个有图形界面的文件签名工具向导:
>signtool wizard
以下是命令行方式的签名:
>signtool sign /f "pfx文件的全路径" /p "pfx文件的保护口令" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /d "本次签名的描述" "被签名的程序的全路径"
E. makecert不是内部或外部命令,怎么解决
Makecert.exe 包含基本选项和扩展选项。基本选项是最常用于创建证书的选项。扩展选项提供更多的灵活性。
一定不要将此工具生成的证书私钥存储在 .snk 文件中。如果需要存储私钥,则应使用密钥容器。
[警告说明] 警告:
应使用证书存储区来安全地存储证书。此工具使用的 .snk 文件以不受保护的方式存储私钥。创建或导入 .snk 文件时,在使用期间应注意保证其安全,并在使用后将其移除。
makecert [options] outputCertificateFile
参数
说明
outputCertificateFile
测试 X.509 证书要写入的 .cer 文件的名称。
基本选项
选项
说明
-n x509name
指定主题的证书名称。此名称必须符合 X.500 标准。最简单的方法是在双引号中指定此名称,并加上前缀 CN=;例如,"CN=myName"。
-pe
将所生成的私钥标记为可导出。这样可将私钥包括在证书中。
-sk keyname
指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。
-sr location
指定主题的证书存储位置。Location 可以是 currentuser(默认值)或 localmachine。
-ss store
F. CA根证书哪里可以申请一个
可以买一个已经受微软信任的根证书。
G. vs2010 makecert.exe放在哪
makecert.exe不用去找,安装VS2008后,在开始菜单相应的路径找到该命令提示符:Microsoft Visual Studio 2008/Visual Studio Tools/Visual Studio 2008 命令提示
打开后,输入makecert,就可以开始了
参数为:makecert -r -pe -n "cn=MyCA" -$ commercial -a sha1 -b 08/05/2010 -e 01/01/2012 -cy authority -ss my -sr currentuser
其中各部分的意义:
-r: 自签名
-pe: 将所生成的私钥标记为可导出。这样可将私钥包括在证书中。
-n "cn=MyCA": 证书的subject name,.net自带类库中有X509Store类,可以在store中根据证书subject name,来找到改证书
store参考:X509Store 类
-$ commercial:指明证书商业使用。。。
-a:指定签名算法。必须是 md5(默认值)或 sha1。
-b 08/05/2010:证书有效期的开始时间,默认为证书的创建日期。格式为:mm/dd/yyyy
-e 01/01/2012:指定有效期的结束时间。默认为 12/31/2039 11:59:59 GMT。格式同上
-ss my:证书产生到my个人store区
-sr currentuser:保持到计算机当前个人用户区,其他用户登录系统后则看不到该证书。。
查看该生成的证书并导出:
可以在MMC的证书管理单元中对证书存储区进行管理。Windows没有给我们准备好直接的管理证书的入口。自己在MMC中添加,步骤如下:
1. 开始→运行→MMC,打开一个空的MMC控制台。
2. 在控制台菜单,文件→添加/删除管理单元→添加按钮→选”证书”→添加→选”我的用户账户”→关闭→确定
3. 在控制台菜单,文件→添加/删除管理单元→添加按钮→选”证书”→添加→选”计算机账户”→关闭→确定
然后导出为PFX格式的证书,PKCS#12规范的证书,包含了公钥和私钥,导出时需要提供一个私钥的保护密码,在导出时设置即可
H. 是否有可能以编程方式生成仅使用C#X509证书
创建X509证书方法较多,在Windows 环境下大致总结了几中办法, 1) 通过CA获取证书, 2) 通过微软提供的makecert 工具得到测试证书 3) 编程的方法创建,.Net提供了 X509Certificate2 类,该类可以用于创建证书,但只能从RawData中创建
I. 用Makecert.exe生成测试证书时,什么是指定的主题什么是自签署证书
最大公因数是15最小公倍数是24