SSL 和 TLS 协议

1. TSL和SSL

SSL/TLS 是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS 综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。

SSL介于应用层和TCP层之间,应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。

1. 术语

  • SSL(Secure Socket Layer): 安全套接层,是1994年由Netscape公司设计的一套协议,并与1995年发布了3.0版本。
  • TLS(Transport Layer Security): 传输层安全是IETF在SSL3.0基础上设计的协议,实际上相当于SSL的后续版本。
  • keystore: keytool 生成证书的存储库,用来存储若干条目,每一条目包含公私钥,主体信息等。默认为用户目录下.keystore,相当于一个有密码保护的文件。
  • truststore: 与 keystore 格式相同,但是为区分只用来存放信任的证书,不存密钥等信息。
  • CA: Certificate Authority,证书授权中心,负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。

2. 生成

1. jdk 自带工具

1
2
3
4
5
6
7
8
9
10
11
12
13
keytool -genkeypair^
-alias flink.internal^
-keystore internal.keystore^
-dname "CN=flink.internal"^
-storepass internal_store_password^
-keyalg RSA^
-keysize 4096^
-storetype PKCS12


keytool -genkeypair -alias flink.rest -keystore rest.keystore -dname "CN=copote.com" -ext "SAN=dns:copote.com,ip:221.221.221.10" -storepass rest_keystore_password -keyalg RSA -keysize 4096 -storetype PKCS12
keytool -exportcert -keystore rest.keystore -alias flink.rest -storepass rest_keystore_password -file flink.cer
keytool -importcert -keystore rest.truststore -alias flink.rest -storepass rest_truststore_password -file flink.cer -noprompt

查看内容

1
2
keytool -list -v -keystore rest.keystore
keytool -list -v -file flink.cer

转换

1
2
openssl x509 -inform der -in flink.cer -out flink.pem
openssl x509 -inform der -in ca.cer -out ca.pem

2. 证书转换

SSL证书格式

1. wiki

1. PFX

PFX 格式是二进制格式,用来存储服务证书、中间证书和私钥在一个文件中。PFX 文件一般用来在 Windows 系统中使用,来导入和导出证书和私钥。

当其转为 PEM 格式时,OpenSSL 会加上述证书和私钥放入一个文件中,使用时需要用文本编辑器打开,并分隔出相应证书和私钥。

2. PEM

PEM 格式是证书颁发机构颁发证书的最常见格式。PEM证书通常有诸如.pem、.crt、.cer和.key等扩展名。它们是Base64编码的ASCII文件,包含”—–BEGIN CERTIFICATE—–”和”—–END CERTIFICATE—–”语句。服务器证书、中间证书和私钥都可以放到PEM格式中。

Apache和其他类似的服务器使用PEM格式的证书。几个PEM证书,甚至私钥,都可以包含在一个文件中,一个在另一个下面,但大多数平台,如Apache,希望证书和私钥是在不同的文件中。

3. DER

DER 格式只是证书的二进制形式,而不是 ASCII PEM 格式。它的文件扩展名有时是.der,但它的文件扩展名往往是.cer,所以区分DER.cer文件和PEM.cer文件的唯一方法是在文本编辑器中打开它,寻找BEGIN/END语句。

所有类型的证书和私钥都可以用DER格式进行编码。DER 通常用于 Java 平台。SSL 转换器只能将证书转换为 DER 格式。如果你需要将私钥转换为 DER,请使用本页面的 OpenSSL命令。

2. PFX 转换 DER

1. PFX to PEM

获取 PFX 文件,转换成 PEM 文件

1
2
# PFX 文件转 PEM 文件,此处协议是 pkcs12,需要输入生成时的密码
openssl pkcs12 -in example-client.pfx -out example-client.pem -nodes

2. PEM 文件分隔

转成的 PEM 文件中,会包含证书(certificate)和私钥(private)信息,使用文本编辑器打开,并拆分

1
2
3
4
5
6
7
8
9
10
Bag Attributes
...
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Bag Attributes
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

3. PEM 转 DER

仅处理证书的 PEM 文件

1
2
# PEM 文件转 DER 文件,此处协议是 x509
openssl x509 -outform der -in example-client-certificate.pem -out certificate.der