[TOC] ## 协议与实现 - **SSL/TLS** - **OpenSSL** 是 `SSL/TLS`的一个实现 ## 证书标准 - **X.509** 是一种证书的标准,里面定义了证书里应该包含哪些内容。参考*RFC5280*, SSL是按照这个标准实现的。 ## 证书的编码格式 `X.509`证书目前有以下2中证书格式,一种是`文本类型`,一种是`二进制类型`。 1. **PEM** privacy enhanced mail, 是一种文本格式。打开文件看是以 `-----BEGIN`开头,以`-----END`结尾,内容用BASE64编码。这类是apache, *NIX系统偏爱的格式。可以使用下面命令查看证书内容 `openssl x509 -in certificate.pem -text -noout`。 2. **DER** distinguished encoding rules是一种二进制格式。可用下面命令查看证书内容 `openssl x509 -in certificate.der **-inform der** -text -noout`。java和win偏好这种格式。 ## 相关文件扩展名 1. **CRT** 证书(certificate)的一种,常见*NIX系统。可能是PEM或者DER格式。大多是PEM文本编码。 2. **CER** 也是certificate缩写。常见win系统。大多是DER二进制编码。 3. **KEY** 非X.509证书。常用来存放一个公钥或者私钥。编码可以是PEM或者DER。查看PEM格式key `openssl rsa -in mykey.key -text -noout` 查看DER格式key: `openssl rsa -in mykey.key -text -noout -inform der` 4. **CSR** certificate signing request。证书签名请求。向权威机构请求颁发一个签名证书的申请文件。内部包含了一个公钥和其他信息。随着公钥还有个私钥要自己保存好。查看方法 `openssl req -noout -text -in my.csr`如果是DER则在命令后面加入 -inform der 5. **JKS** 6. **PFX/P12** ## 几个场景 1. **PEM转DER** `openssl x509 -in cert.crt -outform der -out cert.der` 2. **DER转PEM** `openssl x509 -in cert.crt -inform der -outform pem -out cert.pem` > 要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req… 3. **向权威证书颁发机构申请证书** 生成一个csr:`openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr` 然后把csr交给权威证书颁发机构,权威证书颁发机构对此进行签名。保留好csr,当权威证书颁发机构颁发的证书过期的时你还可以用同样的csr来申请新的证书,key保持不变 4. **生成自签名的证书** `openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem` 在生成证书的过程中会要你填一堆的东西,其实真正要填的只有Common Name,通常填写你服务器的域名,如”yourcompany.com”,或者你服务器的IP地址,其它都可以留空 ## 参考文章 - http://www.cnblogs.com/guogangj/p/4118605.html