德州哪家网站优化公司专业,微商怎么做推广,安徽工程信息网官网首页,长沙网站搭建一、 获得证书... 21、 从CA获得... 22、 从windows2003证书服务中获得... 23、 使用makecert工具获得... 2二、 证书的保存... 21、 保存在证书存储区... 22、 以文件形式保存... 42.1. 带有私钥的证书... 42.2. …一、 获得证书... 2 1、 从CA获得... 2 2、 从windows2003证书服务中获得... 2 3、 使用makecert工具获得... 2 二、 证书的保存... 2 1、 保存在证书存储区... 2 2、 以文件形式保存... 4 2.1. 带有私钥的证书... 4 2.2. 二进制编码的证书... 4 2.3. Base64编码的证书... 4 3、 存储区中的证书跟证书文件相互转换... 4 3.1. 使用工具相互转换... 4 3.1.1 从证书文件导入证书存储区... 4 3.1.2 从证书存储区导出为证书文件... 7 3.2. 使用代码相互转换... 10 3.2.1 从证书文件导入证书存储区... 10 3.2.2 从证书存储区导出为证书文件... 11 数字证书也称作数字证书将身份绑定到一对可以用来加密和签名数字信息的电子密钥。数字证书能够验证一个人使用给定密钥的权利这有助于防止有人利用假密钥冒充其他用户。数字证书与加密一起使用可以提供一个更加完整的解决方案确保交易中各方的身份。 一、 获得证书 1、 从CA获得 如果是商业应用最好从证书的签发机构CA获得证书比如VeriSign这样的大的CA签发的证书已经被一些系统默认为可信任的证书签发机构它所签发的证书也是被信任的。但是这样的证书需要购买。 如果不是商业应用这里推荐一个可以免费申请证书的CAwww.cacert.org 2、 从windows2003证书服务中获得 在windows2003中安装证书服务器windows2003服务器即可当做一个小型的CA可以申请签发证书。 3、 使用makecert工具获得 微软在framework SDK中提供了一个生成X.509数字证书的命令行工具Makecert.exe。 Makecert生成证书被保存到命令中指定的证书存储区。 比如使用下面这个命令生成一个证书 makecert -sr CurrentUser -ss My -n CNMyTestCert -sky exchange -pe 参数说明 -sr CurrentUser -- 指定主题的证书存储位置。Location 可以是 currentuser默认值或 localmachine -ss My -- 指定主题的证书存储名称输出证书即存储在那里。My表示保存在“个人” -n CNMyTestCert -- 指定主题的证书名称。此名称必须符合 X.500 标准。最简单的方法是在双引号中指定此名称并加上前缀 CN例如CNmyName。 -sky exchange -- 指定颁发者的密钥类型必须是 signature、exchange 或一个表示提供程序类型的整数。默认情况下可传入 1 表示交换密钥传入 2 表示签名密钥。 -pe -- 将所生成的私钥标记为可导出。这样可将私钥包括在证书中。 这个命令生成一个名字为MyTestCert的证书被保存到了当前用户的个人证书存储区内。 Makecert命令的详细说明请参看微软Makecert.exe工具的文档http://msdn.microsoft.com/library/chs/default.asp?url/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp 二、 证书的保存 1、 保存在证书存储区 Makecert命令生成的证书被保存在证书存储区。证书存储区是系统中一个特殊区域专门用来保存X.509数字证书。 可以在MMC的证书管理单元中对证书存储区进行管理。Windows没有给我们准备好直接的管理证书的入口。自己在MMC中添加步骤如下 l 开始 à 运行 à MMC打开一个空的MMC控制台。 l 在控制台菜单文件 à 添加/删除管理单元 à 添加按钮 à 选”证书” à 添加 à 选”我的用户账户” à 关闭 à 确定 l 在控制台菜单文件 à 添加/删除管理单元 à 添加按钮 à 选”证书” à 添加 à 选”计算机账户” à 关闭 à 确定 完成后在MMC控制台中有了两个MMC管理单元 Figure 1证书管理 添加完证书管理单元后可以保存一下这个MMC控制台的设置方便以后再次使用。在文件菜单中选“保存”比如可以保存为“证书.msc”。 这两个管理单元分别对应证书的两类存储位置 当前用户CurrentUser -- 当前用户使用的 X.509 证书存储区。 本地计算机LocalMachine -- 分配给本地计算机的 X.509 证书存储区。 每个存储位置下面的子目录代表证书的存储区预设了以下存储区 AddressBook 其他用户的 X.509 证书存储区。 AuthRoot 第三方证书颁发机构 (CA) 的 X.509 证书存储区。 CertificateAuthority 中间证书颁发机构 (CA) 的 X.509 证书存储区。 Disallowed 吊销的证书的 X.509 证书存储区。 My 个人证书的 X.509 证书存储区。 Root 受信任的根证书颁发机构 (CA) 的 X.509 证书存储区。 TrustedPeople 直接受信任的人和资源的 X.509 证书存储区。 TrustedPublisher 直接受信任的发行者的 X.509 证书存储区。 2、 以文件形式保存 作为文件形式存在的证书一般有这几种格式 2.1. 带有私钥的证书 由Public Key Cryptography Standards #12PKCS#12标准定义包含了公钥和私钥的二进制格式的证书形式以pfx作为证书文件后缀名。 2.2. 二进制编码的证书 证书中没有私钥DER 编码二进制格式的证书文件以cer作为证书文件后缀名。 2.3. Base64编码的证书 证书中没有私钥BASE64 编码格式的证书文件也是以cer作为证书文件后缀名。 3、 存储区中的证书跟证书文件相互转换 3.1. 使用工具相互转换 Windows提供了内置的工具可以完成数字证书从文件形式导入到证书存储区从证书存储区导出为证书文件的功能。 3.1.1 从证书文件导入证书存储区 在资源管理器中找到你要导入的证书文件右键点击pfx或者cer格式的证书这里以上面用makecert生成的MyTestCert证书为例选择“安装”证书导入向导 Figure 2. 证书导入向导 下一步显示要导入证书文件的路径确认即可再下一步。 如果是导入pfx含有私钥的证书需要提供密码 Figure 3. 导入pfx时需要密码 pfx证书含有私钥在保存为证书文件时设置有私钥密码以保护私钥的安全所以这一步需要提供保存证书时设置的私钥密钥。 如果选择了“标识此密钥为可导出”导入到证书存储区的证书以后还能导出含有私钥的证书否则只能导出不含私钥的证书。 再下一步如果是导入cer证书导入向导开始后就直接到了这一步。 Figure 4. 选择证书存储区 可以根据证书的类型自动存放到合适的区域也可以自己选择存储区一般选个人存储区。 导入完成。查看证书管理中证书已经导入 Figure 5. 查看导入的证书1 双击这个MyTestCert证书 Figure 6. 查看导入的证书2 这是证书的具体信息可以看见这个证书包含有私钥。如果导入的是cer证书证书中不含有私钥的那么这里不会显示有相应的私钥。 3.1.2 从证书存储区导出为证书文件 把上面导入到证书存储区的证书再导出为证书文件。 在MyTestCert证书上点击右键 à 所有任务 à 导入…证书导出向导运行 Figure 7. 证书导出向导 这里要导出的MyTestCert证书是含有私钥的证书所以向导首先要求选择导出的证书是否连同私钥一同导出。如果选要导出私钥下一步 Figure 8. 含私钥pfx格式证书选项 选择导出含私钥的证书生成pfx格式的证书。这里是些导出pfx证书的选项。 如果选择了不导出私钥或者选择导出的证书本身就不含有私钥那么这一步只能选不含私钥的证书格式导入私钥的选项是暗的 Figure 9. 不含私钥cer格式证书选项 这里是导出不含私钥证书的选项一般导出为cer证书。 DER编码就是导出的证书是二进制格式存储的证书。 Base64编码就是把证书的二进制编码转成base64的编码后存储的证书。 下一步如果是导出含私钥的证书需要提供私钥保护密码 Figure 10. 导出含私钥的证书需要私钥保护密码 下一步提供证书文件的路径 Figure 11. 指定导出证书的路径 导出证书完成。 3.2. 使用代码相互转换 除了使用windows提供的工具交互操作导入或者导出证书也可以在程序中使用代码进行证书的导入和导出操作以适应在应用系统中对证书进行操作的需求。 下面通过代码完成上面使用工具导入证书文件然后把导入的证书导出为证书文件的的同样功能。 3.2.1 从证书文件导入证书存储区 l 读取证书放入证书对象 Framework2.0中myX509Certificate2类代表了证书。 //从证书文件载入证书如果含有私钥的需要提供保存证书时设置的密码 X509Certificate2 myX509Certificate2 new X509Certificate2( C:\Samples\PartnerAEncryptMsg\MyTestCert.pfx, //证书路径 password, //证书的私钥保护密码 X509KeyStorageFlags.Exportable //表示此证书的私钥以后还可以导出 ); X509Certificate2构造函数中X509KeyStorageFlags.Exportable参数相当于在工具交互导入证书时选择了“标识此密钥为可导出”如果构造函数中不加这个参数证书的私钥将不可导出。 以后不管这个证书被导入到哪个存储位默认的私钥都被保存到CurrentUser如果需要把私钥保存到LocalMachine第三个参数应该是这样X509KeyStorageFlags.Exportable| X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet l 建立相应的存储区对象并保存证书 Framework2.0中X509Store类表示证书存储区前面讨论过证书存储区证书存储区实际是个层次结构第一层是存储位置storeLocation第二个层次是存储区storeNameX509Store实际上代表的是某个存储位置下的某个存储区。 新建一个存储区X509Store并把上面的证书对象存入其中 //新建指向当前用户个人证书存贮区的X509Store对象 X509Store store new X509Store(StoreName.My,StoreLocation.CurrentUser); store.Open(OpenFlags.ReadWrite); store.Add(myX509Certificate2); store.Close(); 这样证书导入到了当前用户的个人证书存储区内。 3.2.2 从证书存储区导出为证书文件 再将上面导入到当前用户的个人证书存储区内的证书导出为证书文件 //新建指向当前用户个人证书存贮区的X509Store对象 X509Store store new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); //轮询存储区中的所有证书 foreach(X509Certificate2 myX509Certificate2 in store.Certificates) { //将证书的名称跟要导出的证书MyTestCert比较,找到要导出的证书 if (myX509Certificate2.Subject CNMyTestCert) { //证书导出到byte[]中password为私钥保护密码 byte[] CertByte myX509Certificate2.Export(X509ContentType.Pfx,password); //将证书的字节流写入到证书文件 FileStream fStream new FileStream( C:\Samples\PartnerAEncryptMsg\MyTestCert_Exp.pfx, FileMode.Create, FileAccess.Write); fStream.Write(CertByte, 0, CertByte.Length); fStream.Close(); } } store.Close(); 注意X509Certificate2类的Export方法第一个参数X509ContentType.Pfx表示要导出为含有私钥的pfx证书形式第二个参数为私钥保护密码。 如果要导出为不含私钥的cer证书第一个参数使用X509ContentType.Cert表示导出为不含私钥的cer证书也就不需要密码了 byte[] CertByte myX509Certificate2.Export(X509ContentType.Cert); 转载于:https://www.cnblogs.com/chnking/archive/2007/08/18/860983.html