玩转一下 HTTPS 安全连接
标准的 TLS 认证示意图:standard (1-way) TLS auth:
TLS 加密通讯的示意图:
名词术语
- SSL(Secure Sockets Layer),现在应该叫 TLS,但由于习惯问题,我们还是叫 SSL 比较多
- 证书(Certificate) - *.cer *.crt
- OpenSSL - OpenSSL 是 SSL 规范的一个实现。理论上 SSL 规范是安全的,很难破解。但 SSL 实现就可能有些漏洞,如著名的 心脏出血。OpenSSL 还提供了一大堆强大的工具软件,强大到 90% 我们都用不到。
- X.509 一种证书标准,主要定义了证书中应该包含哪些内容。其详情可以参考 RFC5280,SSL 使用的就是这种证书标准。
- 私钥(Private Key) - *.key
- 证书签名请求(Certificate signing request) - *.csr
- BASE64 编码证书 - *.pem (privacy-enhanced mail)
- 二进制编码证书 - *.der
- 证书吊销列表(Certificate Revocation List) - *.crl
- PKCS(Public-Key Cryptography Standards),是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准
- 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12 等)
- SSL中,公钥、私钥、证书的后缀名都是些啥?
过程,参考 Mosquitto SSL Configuration -MQTT TLS Security
创建密码保护的私钥 openssl genrsa -des3 -out ca.key 2048
➜ tls openssl genrsa -des3 -out ca.key 2048 Generating RSA private key, 2048 bit long modulus .....+++ ....................................+++ e is 65537 (0x10001) Enter pass phrase for ca.key: Verifying - Enter pass phrase for ca.key: ➜ tls ls -lh total 8 -rw-r--r-- 1 bingoobjca staff 1.7K 7 15 14:10 ca.key
使用私钥创建根证书 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=BEIJING/L=BEIJING/O=BJCA/OU=SA/CN=bjca.cn"
➜ tls openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=BEIJING/L=BEIJING/O=BJCA/OU=SA/CN=bjca.cn" Enter pass phrase for ca.key: ➜ tls ls -lh total 16 -rw-r--r-- 1 bingoobjca staff 1.2K 7 15 14:16 ca.crt -rw-r--r-- 1 bingoobjca staff 1.7K 7 15 14:10 ca.key
生成服务端私钥 openssl genrsa -out server.key 2048
➜ tls openssl genrsa -out server.key 2048 Generating RSA private key, 2048 bit long modulus ..............................+++ ..................................................................................................................................+++ e is 65537 (0x10001) ➜ tls ls -lh total 24 -rw-r--r-- 1 bingoobjca staff 1.2K 7 15 14:16 ca.crt -rw-r--r-- 1 bingoobjca staff 1.7K 7 15 14:10 ca.key -rw-r--r-- 1 bingoobjca staff 1.6K 7 15 14:18 server.key
生成服务端证书请求 openssl req -new -out server.csr -key server.key -subj "/C=CN/ST=BEIJING/L=BEIJING/O=BJCA/OU=SA/CN=bjca.cn"
注意:这里的 CN(Common Name)很重要,一般是域名。生成的证书请求,不需要真发送给证书机构,用作测试或者私有证书。
➜ tls openssl req -new -out server.csr -key server.key -subj "/C=CN/ST=BEIJING/L=BEIJING/O=BJCA/OU=SA/CN=bjca.cn" ➜ tls ls -lh total 32 -rw-r--r-- 1 bingoobjca staff 1.2K 7 15 14:16 ca.crt -rw-r--r-- 1 bingoobjca staff 1.7K 7 15 14:10 ca.key -rw-r--r-- 1 bingoobjca staff 993B 7 15 14:21 server.csr -rw-r--r-- 1 bingoobjca staff 1.6K 7 15 14:18 server.key
生成私有的服务端证书 openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
➜ tls openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 Signature ok subject=/C=CN/ST=BEIJING/L=BEIJING/O=BJCA/OU=SA/CN=bjca.cn Getting CA Private Key Enter pass phrase for ca.key: ➜ tls ls -lh total 48 -rw-r--r-- 1 bingoobjca staff 1.2K 7 15 14:16 ca.crt -rw-r--r-- 1 bingoobjca staff 1.7K 7 15 14:10 ca.key -rw-r--r-- 1 bingoobjca staff 17B 7 15 14:23 ca.srl -rw-r--r-- 1 bingoobjca staff 1.2K 7 15 14:23 server.crt -rw-r--r-- 1 bingoobjca staff 993B 7 15 14:21 server.csr -rw-r--r-- 1 bingoobjca staff 1.6K 7 15 14:18 server.key
服务端需要: ca.crt, server,crt, server.key 三个文件
查看证书状态 openssl x509 -in ./server.crt -noout -text
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论