Pfx和cer都是证书的文件格式,它们之间的区别如下
1.带有私钥的证书
由公钥密码标准#12和PKCS标准# 12定义,它是一种二进制格式的证书形式,包括公钥和私钥,证书文件的后缀为pfx。
2.二进制编码证书
证书中没有私钥,DER以二进制格式对证书文件进行编码,cer作为证书文件的后缀名称。
3.编码证书
证书中没有私钥,编码格式的证书文件也使用cer作为证书文件的后缀名称。
从定义中可以看出,只有pfx格式的数字证书包含私钥,而cer格式的数字证书只包含公钥,没有私钥。
pfx证书导入过程中的一项是“将此密钥标记为可导出。这将允许您稍后备份或传输密钥。。通常是不检查的。如果勾选了,别人就有机会备份你的钥匙了。如果未选中,则密钥实际上已导入,但不能再次导出。这确保了密钥的安全性。
如果在导入过程中未选择此项,则“导出私钥”项为灰色,在证书备份过程中无法选择。只能导出cer格式的公钥。如果在导入过程中选择了此项,则在导出过程中,“导出私钥”项是可选的。
如果要导出私钥(pfx),需要输入密码。这个密码是为了再次加密私钥,从而保证私钥的安全性。即使有人获得了您的证书备份(pfx)并且不知道加密私钥的密码,他们也不能导入证书。相反,如果您只导入和导出cer证书,系统不会提示您输入密码。因为公钥一般对公众开放,所以不需要加密。
下面描述了从自签名证书导出pfx和cer证书
完整代码:
1个公共密封类数据证书
2 {
为3 #地区生成证书
4 /// <。摘要>。
5 ///根据指定的证书名称生成证书,并制作证书完整路径(包括公钥和私钥,保存在MY store中)
6 /// <。/summary>。
7 /// <。param name="subjectName " >& lt/param>。
8 /// <。param name="makecertPath " >& lt/param>。
9 /// <。退货>。& lt/returns>。
10公共静态bool CreateCertWithPrivateKey(字符串subjectName,字符串makecertPath)
11 {
12 subject name = " CN = "+subject name;
13 string param = "-PE-ss my-n " "+subject name+" " ";
14试
15 {
16流程p =流程。Start(makecertPath,param);
17 p . WaitForExit
18 p . Close();
19 }
20个捕捉(例外e)
21 {
22返回false
23 }
24返回真;
25 }
26 #endregion
27
28 #区域文件的导入和导出
29 /// <。摘要>。
30 ///从WINDOWS证书存储的个人MY区域找到subjectName为的证书。
31 ///并将其导出为pfx文件,同时为其指定密码
32 ///并从个人区域删除证书(如果isDelFromstor为真)
33 /// <。/summary>。
34 /// <。param name="subjectName " >证书主题,不包括cn =
35 /// <。param name="pfxFileName " >;Pfx文件名
36//& lt。param name="password ">。pfx文件的密码
37//& lt。param name="isDelFromStore " >;删除
38 /// <。退货>。& lt/returns>。
39公共静态bool ExportToPfxFile(字符串subjectName,字符串pfxFileName,
40字符串密码,bool isDelFromStore)
41 {
42 subject name = " CN = "+subject name;
43 X509 store store = new X509 store(StoreName。我的,存储位置。CurrentUser);
44号店。Open(OpenFlags。read write);
45 X509 certificate 2 collection store collection =(X509 certificate 2 collection)存储。证书;
46 foreach(store collection中的x509证书2 x509)
47 {
48 if (x509。Subject == subjectName)
49 {
50调试。打印(字符串。格式("证书名称:{0} ",x509。主语));
51
52字节[] pfxByte = x509。导出(X509ContentType。Pfx,密码);
53使用(FileStream fileStream =新FileStream(pfxFileName,FileMode。创建))
54 {
55 //将数据逐字节写入文件。
56 for(int I = 0;i <。pfxByte。长度;i++)
57 fileStream。write byte(PfxByte[I]);
58 //将流位置设置到文件的开头。
59 fileStream。Seek(0,SeekOrigin。begin);
60 //读取并验证数据。
61 for(int I = 0;i <。fileStream。长度;i++)
62 {
63 if (pfxByte[i]!= fileStream。ReadByte())
64 {
65 fileStream。close();66返回false
67 }
68 }
69 fileStream。close();
70 }
71 if (isDelFromStore == true)
72号店。remove(x509);
73 }
74 }
75店。close();
76返回真;
77 }
78 /// <。摘要>。
79 ///从WINDOWS证书存储的个人MY区域找到subjectName为的证书。
80 ///并将其导出为CER文件(即只包含公钥的文件)
81 /// <。/summary>。
82//& lt。param name="subjectName " >& lt/param>。
83 /// <。param name="cerFileName " >;& lt/param>。
84 /// <。退货>。& lt/returns>。
85公共静态bool ExportToCerFile(字符串subjectName,字符串cerFileName)
86 {
87 subject name = " CN = "+subject name;
88 x509 store store = new x509 store(StoreName。我的,存储位置。CurrentUser);
89店。Open(OpenFlags。read write);
90 X509 certificate 2 collection store collection =(X509 certificate 2 collection)存储。证书;
91 foreach(store collection中的X509Certificate2 x509)
92 {
93 if (x509。Subject == subjectName)
94 {
95调试。打印(字符串。格式("证书名称:{0} ",x509。主语));
96 //byte[] pfxByte = x509。导出(X509ContentType。Pfx,密码);
97字节[] cerByte = x509。导出(X509ContentType。cert);
98使用(FileStream fileStream =新FileStream(cerFileName,FileMode。创建))
99 {
100 //将数据逐字节写入文件。
101 for(int I = 0;i <。cerByte。长度;i++)
102 fileStream。写字节(Cerbyte[I]);
103 //将流位置设置到文件的开头。
104 fileStream。Seek(0,SeekOrigin。begin);
105 //读取并验证数据。
106 for(int I = 0;i <。fileStream。长度;i++)
107 {
108 if (cerByte[i]!= fileStream。ReadByte())
109 {
110 fileStream。close();
111返回false
112 }
113 }
114 fileStream。close();115 }
116 }
117 }
118店。close();
119 store = null
120 storecollection = null
121返回真;
122 }
123 #endregion
124
125 #区域从证书获取信息
126//& lt。摘要>。
127 ///根据私钥证书获取证书实体。获得实体后,可以根据其公钥和私钥进行加密和解密
128 ///加密和解密函数使用了DEncrypt的RSACryption类
129//& lt。/summary>。
130//& lt。param name="pfxFileName " >;& lt/param>。
131//& lt。param name="password ">。& lt/param>。
132//& lt。退货>。& lt/returns>。
133公共静态x509 certificate 2 GetCertificateFromPfxFile(字符串pfxFileName,
134字符串密码)135 {
136试
137 {
138返回新的X509证书2(pfxFileName,密码,X509密钥存储标志。可导出);
139 }
140个捕捉(例外e)
141
{142返回null
143 }
144 }
145//& lt。摘要>。
146 ///去存放区领证
147//& lt。/summary>。
148//& lt。param name="subjectName " >& lt/param>。
149//& lt。退货>。& lt/returns>。
150公共静态150证书2 GetCertificateFromStore(字符串subjectName)
151 {
152 subject name = " CN = "+subject name;
153 X509 store store = new X509 store(StoreName。我的,存储位置。CurrentUser);
154店。Open(OpenFlags。read write);
155 X509 certificate 2 collection store collection =(X509 certificate 2 collection)存储。证书;
156 foreach(store collection中的X509Certificate2 x509)
157 {
158 if (x509。Subject == subjectName)
159 {
160返回x509
161 }
162 }
163店。close();
164 store = null
165 storecollection = null166返回null
167 }
168//& lt。摘要>。
169 ///根据公钥证书,返回证书实体
170//& lt。/summary>。
171//& lt。param name="cerPath">。& lt/param>。
172公共静态X509证书2 GetCertFromCerFile(字符串证书路径)
173 {
174试试
175 {
176返回新的x509 certificate 2(cerPath);177 }
178捕获(例外e)179
180返回null181 }
182 }
183 #endregion184 }
SSL证书采用加密技术,技术含量高。今后,GDCA将继续推荐更多关于SSL证书的技术知识。让大家正确认识SSL证书,快速正确部署HTTPS安全协议。更多信息请关注GDCA。
1.《cer 详解关于Pfx与cer之间的关系》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《cer 详解关于Pfx与cer之间的关系》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/797819.html