数字证书基本知识总结

版权声明:本文为博主Lynn&Lingfei原创文章,未经博主允许不得转载。 https://blog.csdn.net/meng564764406/article/details/79156559

本章用于普及证书基本知识,个人总结,如有不对欢迎指正。

其他配套章节:

OPENSSL证书及格式转换

keystore或者JKS证书及转换

开头普及一下证书知识,先说通俗的讲解,证书一般分为两种组成,私钥、公钥,这是一套数字证书,有人说证书通过后缀来判断,比如.pem,.cer.crt等,这是很不科学的。名字后缀也是名字,只是让你更清楚的知道这是什么类型的,可不是看到这种类型的就认为他是私钥或者公钥。

当然自己在创建私钥公钥的时候尽量遵守后缀的规则,不然你自己也忘了这个什么样的东东了。
那么规则有什么呢,我简单说几种我常用的类型。至于其他的可以在下文找到答案。

后缀

含义

备注

.pem

BASE64编码的公私钥文件,可以查看内容

 

.pfx /.keystore

证书仓库,里面包含一对公私钥,同时还可以导入多种公钥证书

这个一般很固定,命名很规范

.crt .cer .der

一般公钥,内荣不可查看

 

以上几种,就是我经常使用几种证书。

记住两点,无论证书是什么格式的证书不要用后缀来判断,没有什么直接关系。

二,证书格式转换了,但是证书内容不会变。比如a.pem通过转换成了b.cer格式证书,除了调用这个证书的方式变了,内容没变,实质还是a.pem。

先说些概念性的东西

PKCS证书 

PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard

X.509是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。 

PKCS#7 常用的后缀是: .P7B .P7C .SPC
PKCS#12 常用的后缀有: .P12 .PFX
X.509 DER 编码(ASCII)的后缀是: .DER .CER .CRT
X.509 PAM 编码(Base64)的后缀是: .PEM .CER .CRT 

---------------------------------------------------------------------------
.der/.cer/.crt是用于存放证书,不含私钥,前两者为二进制存储,crt文件可能是二进制的,也可能是文本格式的,应该以文本格式居多。
.pem跟crt/cer的区别是它以Ascii来表示,一般是文本格式的,可以放证书或者私钥,pem如果只含私钥的话,一般用.key扩展名,而且可以有密码保护。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式,二进制格式。
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
-------------------------------------------------------------------------------
文本格式转换为二进制,一般将字符串用base64解码,即二进制。
-------------------------------------------------------------------------------
对于以上各种证书来说,它们的保存类型有pem和der两种,pem代表着以文本格式保存的公私钥,der是以二进制保存的公私钥。

Java数字证书 keystore类型
Java自带的keytool工具是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。 
keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥

ketstore类型和JKS类型从理论上来说,两种是同样的类型。

JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型(我所知道的共有5种,JKS, JCEKS, PKCS12, BKS,UBER)。
JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。
JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDes)。
PKCS#12是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。
BKS 来自BouncyCastle Provider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个 bit都会产生错误),BKS能够跟JKS互操作,读者可以用Keytool去TryTry。
UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish加密,因此keystore能够防止被误改、察看以及校验。以前,Sun JDK(提供者为SUN)允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。



猜你喜欢

转载自blog.csdn.net/meng564764406/article/details/79156559