一、证书标准及文件后缀说明
- X.509
X.509 是密码学里公钥证书的格式标准。证书组成结构标准用ASN.1(一种标准的语言)来进行描述。 - ASN.1
ASN.1抽象语法标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。 - DER
DER(Distinguished Encoding Rules,可辨别编码规则)。ASN.1对象的编码是ASN.1标准的重要部分,通常采用的是BER,而DER则是其一个子集。 - .csr
这是证书签名请求文件。格式为PKCS#10,该格式在RFC 2986中定义。它包括所请求证书的秘钥详细信息,比如主题、组织、国家、单位等,以及要签名的证书的公共秘钥。CA根据CSR文件提供的信息进行签名后返回签名证书,返回的证书就是公共证书(包含公钥,不包含私钥)。 - .pem
定义在RFCs 1421 到1424,这是一个容器格式规范,也许只包含公钥,也许包含完整的签名路径链,包括公钥、私钥、根证书。PEM是Privacy Enhanced Mail的缩写,它是一个失败的保护电子邮件的方法,但是这个容器格式一直在使用。 - .key
这是一个PEM格式的文件,只包含证书的私钥。 - .pkcs12 .pfx .p12
最初定义在RSA的Public-Key Cryptography Standards,"12"这个版本开始是微软使用,后来定义在 RFC 7292。这是一个密码容器格式,可以包含公钥和私钥证书对。跟.pem文件不同,这个容器格式是加密的。java的keytool工具可以产生这种格式的证书。 - .der
ASN.1语法的编码规则之一。.pem文件是.der文件的Base64版本。 - .cert .cer .crt
.pem文件的不同格式,也可以是.der文件。这些文件在Windows下可以直接识别,.pem无法识别。 - .p7b .keystore
定义在RFC 2315这是Windows用于证书交换的一种格式,java支持该格式,通常用.keystore作为后缀。 - .crl
证书吊销列表。
二、自签证书操作
自签证书包括两大步骤,第一步制作根证书,第二部制作应用证书。其中根证书用来签发应用证书。
1.制作根证书
openssl req -newkey rsa:2048 -keyout jianshu.key -x509 -days 36500 -out jianshu-root.pem
通过openssl命令生成jianshu.key
(私钥文件)和jianshu-root.pem
(根证书文件)。
2.生成应用证书私钥
openssl genrsa -aes256 -out app.key 2048
3.生成应用证书请求文件
openssl req -new -key app.key -out app-csr.csr
4.用根证书签发应用证书
openssl x509 -req -sha256 -days 365 -in app-csr.csr -CA jianshu-root.pem -CAkey jianshu.key -CAcreateserial -out app-crt.pem
如果在windows平台下可以使用以下命令将pem格式的证书转换成windows可识别的证书:
openssl x509 -inform pem -in app-crt.pem -out app-crt.cer
三、参考资源
X.509
ASN.1
简书上解释ASN.1的文章
DER
serverfault论坛上关于openssl各个文件后缀的解释