数字证书格式
常见的数字证书格式
cer 后缀的证书文件有两种编码-->DER 二进制编码或者 BASE64 编码(也
就是.pem) p7b 一般是证书链,里面包括 1 到多个证书 pfx 是指以 pkcs#12
格式存储的证书和相应私钥。在 Security 编程中,有几种典型的密码交换信息
文件格式:
DER-encoded certi%cate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certi%cation Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
.cer/.crt 是用于存放证书,它是 2 进制形式存放的,不含私钥。
.pem 跟 crt/cer 的区别是它以 Ascii 来表示。
pfx/p12 用于存放个人证书/私钥,他通常包含保护密码,2 进制方式
p10 是证书请求
p7r 是 CA 对证书请求的回复,只用于导入
p7b 以树状展示证书链(certi%cate chain),同时也支持单个证书,不含
私钥。其中,我介绍如何从 p12/pfx 文件中提取密钥对及其长度:
1,首先,读取 pfx/p12 文件(需要提供保护密码)
2,通过别名(Alias,注意,所有证书中的信息项都是通过 Alias 来提取的)
提取你想要分析的证书链
3,再将其转换为一个以 X509 证书结构体
4,提取里面的项,如果那你的证书项放在第一位(单一证书),直接读
取 x509Certs[0](见下面的代码)这个 X509Certi%cate 对象
5,X509Certi%cate 对象有很多方法,tain198127 网友希望读取 RSA
密钥(公私钥)及其长度(见 http://www.matrix.org.cn/thread.shtml?
topicId=43786&forumId=55&#reply),那真是太 Easy 了,
X509Certi%cate keyPairCert = x509Certs[0];
int iKeySize =
X509CertUtil.getCerti%cateKeyLength(keyPairCert);
System.out.println("证书密钥算法
="+keyPairCert.getPublicKey().getAlgorithm());
System.out.println("证书密钥长度="+iKeySize);
提取了他所需要的信息。
X.509 定义了两种证书:公钥证书和属性证书
PKCS#7 和 PKCS#12 使用的都是公钥证书
PKCS#7 的 SignedData 的一种退化形式可以分发公钥证书和 CRL
一个 SignedData 可以包含多张公钥证书
PKCS#12 可以包含公钥证书及其私钥,也可包含整个证书链
评论2