证书

实际上,我们使用的证书分很多种类型,SSL证书只是其中的一种。证书的格式是由X.509标准定义。SSL证书负责传输公钥,是一种PKI(Public Key Infrastructure,公钥基础结构)证书。


我们常见的证书根据用途不同大致有以下几种:


1、SSL证书,用于加密HTTP协议,也就是HTTPS。


2、代码签名证书,用于签名二进制文件,比如Windows内核驱动,Firefox插件,Java代码签名等等。


3、客户端证书,用于加密邮件。


4、双因素证书,网银专业版使用的USB Key里面用的就是这种类型的证书。


这些证书都是由受认证的证书颁发机构——我们称之为CA(Certificate Authority)机构来颁发,针对企业与个人的不同,


可申请的证书的类型也不同,价格也不同。CA机构颁发的证书都是受信任的证书,对于SSL证书来说,如果访问的网站与证书绑定的网站一致就可以通过浏览器的验证而不会提示错误。


证书格式

Windows下常见两种证书,后缀为.cer的通常存放公钥,后缀为.pfx的通常存放私钥。可以用OpenSSL的命令行工具就很有用了。


.cer格式比较好处理,它就是一个x509证书,openssl直接可以处理,只需要执行


openssl x509 -in test.cer -text


.pfx格式稍微麻烦一些,它是一个PKCS #12格式的文件,openssl似乎不能直接查看其中的内容,这时候需要把它先转成PEM格式的文件


openssl pkcs12 -in test.pfx -out test.pem -nodes


执行这个命令时,会让你输入.pfx文件中私钥的保护密钥。命令中的-nodes指明,输出的.pem文件中,不用对私钥加密,因为我们只是临时创建这个文件用于查看其中的内容。


有了PEM,剩下的就很自然了:openssl rsa -in test.pem -text


当然,这个命令假设私钥是RSA算法的密钥。


数字证书文件cer和pfx的区别

作为文件形式存在的证书一般有这几种格式:


1.带有私钥的证书


由PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。


2.二进制编码的证书


证书中没有私钥,DER编码二进制格式的证书文件,以cer作为证书文件后缀名。


3.Base64编码的证书


证书中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。


由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。


在pfx证书的导入过程中有一项是“标志此密钥是可导出的。这将您在稍候备份或传输密钥”。一般是不选中的,


如果选中,别人就有机会备份你的密钥了。如果是不选中,其实密钥也导入了,只是不能再次被导出。这就保证了密钥的安全。


如果导入过程中没有选中这一项,做证书备份时“导出私钥”这一项是灰色的,不能选。只能导出cer格式的公钥。如果导入时选中该项,则在导出时“导出私钥”这一项就是可选的。


如果要导出私钥(pfx),是需要输入密码的,这个密码就是对私钥再次加密,这样就保证了私钥的安全,


别人即使拿到了你的证书备份(pfx),不知道加密私钥的密码,也是无法导入证书的。相反,如果只是导入导出cer格式的证书,是不会提示你输入密码的。因为公钥一般来说是对外公开的,不用加密