首页 > 代码库 > PKI证书格式及转换
PKI证书格式及转换
PKI证书格式及转换
2013年10月29日
17:47
PKCS 全称是 Public-Key Cryptography Standards ,是由RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:
PKCS#7 Cryptographic MessageSyntax Standard
PKCS#10 Certification RequestStandard
PKCS#12 Personal InformationExchange 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
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。
.pem跟crt/cer的区别是它以Ascii来表示。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
一 用openssl创建CA证书的RSA密钥(PEM格式):
openssl genrsa -des3 -outca.key 2048
二用openssl创建CA证书(PEM格式,假如有效期为一年):
openssl req -new -utf8 -x509 -days 365 -key ca.key -out ca.crt
openssl是可以生成DER格式的CA证书的,最好用IE将PEM格式的CA证书转换成DER格式的CA证书。
三 x509到pfx
openssl pkcs12 -export -inkey ca.key –in ca.crt -out ca.pfx
注意-inkey和-in两个选项的顺序
四 PEM格式的ca.key转换为Microsoft可以识别的pvk格式。
pvk -in ca.key -out ca.pvk-nocrypt -topvk
五 PKCS#12 到 PEM的转换
openssl pkcs12 -nocerts -nodes-in cert.p12 -out private.pem
验证 openssl pkcs12 -clcerts -nokeys -in cert.p12 -outcert.pem
六 从 PFX 格式文件中提取私钥格式文件 (.key)
openssl pkcs12 -in mycert.pfx-nocerts -nodes -out mycert.key
七 转换 pem 到到 spc
openssl crl2pkcs7 -nocrl-certfile venus.pem -outform DER -out venus.spc
用 -outform -inform 指定DER 还是 PAM 格式。例如:
openssl x509 -in Cert.pem -informPEM -out cert.der -outform DER
八 PEM 到 PKCS#12 的转换,
openssl pkcs12 -export -inCert.pem -out Cert.p12 -inkey key.pem
密钥库文件格式【Keystore】
格式 : JKS
扩展名 : .jks/.ks
描述 : 【JavaKeystore】密钥库的Java实现版本,provider为SUN
特点 : 密钥库和私钥用不同的密码进行保护
格式 : JCEKS
扩展名 : .jce
描述 : 【JCEKeystore】密钥库的JCE实现版本,provider为SUN JCE
特点 : 相对于JKS安全级别更高,保护Keystore私钥时采用TripleDES
格式 : PKCS12
扩展名 : .p12/.pfx
描述 : 【PKCS#12】个人信息交换语法标准
特点 : 1、包含私钥、公钥及其证书
2、密钥库和私钥用相同密码进行保护
格式 : BKS
扩展名 : .bks
描述 : Bouncycastle Keystore】密钥库的BC实现版本,provider为BC
特点 : 基于JCE实现
格式 : UBER
扩展名 : .ubr
描述 : 【BouncycastleUBER Keystore】密钥库的BC更安全实现版本,provider为BC
证书文件格式【Certificate】
格式 : DER
扩展名 : .cer/.crt/.rsa
描述 :【ASN .1 DER】用于存放证书
特点 : 不含私钥、二进制
格式 : PKCS7
扩展名 :.p7b/.p7r
描述 :【PKCS #7】加密信息语法标准
特点 :1、p7b以树状展示证书链,不含私钥
2、p7r为CA对证书请求签名的回复,只能用于导入
格式 : CMS
扩展名 : .p7c/.p7m/.p7s
描述 :【Cryptographic Message Syntax】
特点 :1、p7c只保存证书
2、p7m:signature withenveloped data
3、p7s:时间戳签名文件
格式 : PEM
扩展名 : .pem
描述 :【Printable Encoded Message】
特点 : 1、该编码格式在RFC1421中定义,其实PEM是【Privacy-Enhanced Mail】的简写,但他也同样广泛运用于密钥管理
2、ASCII文件
3、一般基于base 64编码
格式 : PKCS10
扩展名 : .p10/.csr
描述 : 【PKCS #10】公钥加密标准【Certificate Signing Request】
特点 : 1、证书签名请求文件
2、ASCII文件
3、CA签名后以p7r文件回复
格式 : SPC
扩展名 : .pvk/.spc
描述 : 【Software Publishing Certificate】
特点 : 微软公司特有的双证书文件格式,经常用于代码签名,其中
1、pvk用于保存私钥
2、spc用于保存公钥
来自 <http://blog.csdn.net/hansel/article/details/4447631>
openssl中有如下后缀名的文件
.key格式:私有的密钥
.crt格式:证书文件,certificate的缩写
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
常用证书协议
x509v3:IETF的证书标准
x.500:目录的标准
SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
PKCS#7: 是封装数据的标准,可以放置证书和一些请求信息
PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx
来自 <http://wujunfeng.blog.51cto.com/3041/804693>
# 建立 CA 目录结构
mkdir -p./demoCA/{private,newcerts}
touch./demoCA/index.txt
echo 01 >./demoCA/serial
# 生成 CA 的 RSA 密钥对
openssl genrsa -des3-out ./demoCA/private/cakey.pem 2048
# 生成 CA 证书请求
openssl req -new-days 365 -key ./demoCA/private/cakey.pem -out careq.pem
# 自签发 CA 证书
openssl ca -selfsign-in careq.pem -out ./demoCA/cacert.pem
# 以上两步可以合二为一
openssl req -new-x509 -days 365 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem
# 生成用户的 RSA 密钥对
openssl genrsa -des3-out userkey.pem
# 生成用户证书请求
openssl req -new-days 365 -key userkey.pem -out userreq.pem
# 使用 CA 签发用户证书
openssl ca -inuserreq.pem -out usercert.pem
来自 <http://rhythm-zju.blog.163.com/blog/static/310042008015115718637/>