PFX 或 P12
指以pkcs#12格式存储的证书和相应私钥。PKCS#12是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件。
在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。
PKCS#12通常采用PFX,P12作为文件扩展名,用于存放用户证书、crl、用户私钥以及证书链。pkcs12中的私钥是加密存放的。
思科是.p12,微软是.pfx
JKS
通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式”转换为标准的Java Key Store(JKS)文件。JKS文件格式被广泛的应用在基于Java的WEB服务器、应用服务器、中间件。你可以将JKS文件导入到TOMCAT、 WEBLOGIC 等软件。
查看jks格式的证书: keytool -list -v -keystore server.jks
CSR
证书请求文件(Certificate Signing Request)。生成 X509 数字证书前,一般先由用户提交证书申请文件,然后由 CA 来签发证书。大致过程如下(X509 证书申请的格式标准为 pkcs#10 和 rfc2314):
用户生成自己的公私钥对;
构造自己的证书申请文件,符合 PKCS#10 标准。该文件主要包括了用户信息、公钥以及一些可选的属性信息,并用自己的私钥给该内容签名;
用户将证书申请文件提交给 CA;
CA 验证签名,提取用户信息,并加上其他信息(比如颁发者等信息),用 CA 的私钥签发数字证书;
说明:
数字证书(如x.509)是将用户(或其他实体)身份与公钥绑定的信息载体。
一个合法的数字证书不仅要符合 X509 格式规范,还必须有 CA的签名。
用户不仅有自己的数字证书,还必须有对应的私钥。
X509v3数字证书主要包含的内容有:证书版本、证书序列号、签名算法、颁发者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。
查看证书内容:
openssl req -noout -text -in server.csr
openssl req -noout -text -in server.csr -inform der
PEM
Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是 openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
内容类型:表明本文件存放的是什么信息内容,它的形式为“——-BEGIN XXXX ——”,与结尾的“——END XXXX——”对应。
头信息:表明数据是如果被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量 iv。
信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输。
查看PEM证书文件内容:
openssl x509 -in tls-video.pem -inform pem -noout -text
DER
辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。
二进制编码
CER - 一般指使用DER格式的证书。
查看cer证书:
openssl x509 -noout -text -in server.cer
CRT - 证书文件。可以是PEM格式。
KEY - 一般指PEM格式的私钥文件。
查看KEY的内容:
openssl rsa -noout -text -in server.key
openssl rsa -noout -text -in server.key -inform der
X.509是一种证书格式,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:
PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码。Apache和*NIX服务器偏向于使用这种编码格式。
PAM编码(Base64)的后缀是:.PEM .CER .CRT
DER - Distinguished Encoding Rules,打开看是二进制格式,不可读。Java和Windows服务器偏向于使用这种编码格式。
DER编码(ASCII)的后缀是: .DER .CER .CRT
keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。
查看密钥仓库里的内容:
keytool -list -rfc -keystore mykeystore.jks
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
安全证书既包含了用于加密数据的密钥,又包含了用于证实身份的数字签名。安全证书采用公钥加密技术。公钥加密是指使用一对非对称的密钥进行加密或解密。每一对密钥由公钥和私钥组成。用公钥加密的数据只能够被私钥解密。反过来,使用私钥加密的数据只能被公钥解密。
证书格式转换:
crt > cer
openssl x509 -inform der -in client.crt -out client.cer
pem > cer:
openssl x509 -in client.pem -out client.cer
pem > p12:
openssl pkcs12 -export -in server.pem -out server.p12
cer > jks:
keytool -importcert -file client.cer -keystore client.jks -storepass 123456
crt > jks:
keytool -importcert -alias CA -file CA.crt -keystore CA.jks -storepass 123456
crt > der:
openssl x509 -in server.crt -out server.der -outform DER