手把手教你创建HTTPS证书
HTTPS协议概述
在目前广泛使用的浏览器中,通常将用户的web请求使用HTTPS(Hypertext Transfer Protocol Secure)协议通信。从字面意思来看,HTTPS协议在HTTP协议的基础上多了一个“S(ecure)”,本质上是多了对站点服务验证和SSL/TSL通信加密的过程。
在HTTP协议中,浏览器客户端并不会对站点进行校验,任何人都可以来接收用户的请求,并对此进行响应,这无疑是不安全的。此外,HTTP协议通信过程中,不会对客户端和服务器的通信数据进行加密,在网络中容易造成隐私数据的泄露,造成数据安全问题。
因此,HTTPS协议应运而生,使用HTTPS协议进行通信,能够确保用户的请求更加安全可靠。
HTTPS协议中证书的作用
创建证书
安装工具
我们这里使用 CloudFlare 的 PKI 工具集 cfssl 来创建所有的证书。
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64 -O cfssl
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64 -O cfssljson
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl-certinfo_1.6.1_linux_amd64 -O cfssl-certinfo
创建CA证书和密钥
首先我们先创建CA配置文件ca-config.json,该文件是用来配置根证书的使用场景、具体参数等,可以在签名其他证书时用来指定特定场景。
# ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"server": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "876000h"
}
}
}
}
创建证书签名请求文件
我们使用如下ca-csr.json来创建CA证书签名所必须的私钥和证书,还会生成证书签名请求csr文件,用于交叉签名或者重新签名。
# ca-csr.json
{
"CN": "ca",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "ShenZhen",
"O": "zimskyzeng",
"OU": "ca"
}
],
"ca": {
"expiry": "876000h"
}
}
根据请求文件创建CA私钥和证书
注意:此时我们创建的证书是自签名证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
创建通信使用的证书和密钥
以上我们已经创建好了CA私钥和证书,接下来我们将使用CA来生成通信使用的证书和密钥。
因为我们这里是演示创建证书,对于CN字段,在通信使用的证书和CA证书需要不同。
# server-csr.json
{
"CN": "server",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "ShenZhen",
"O": "zimskyzeng",
"OU": "server"
}
],
"hosts": [
"127.0.0.1",
"localhost",
"server.zimskyzeng.com"
]
}
使用CA证书签名,生成通信证书和私钥命令
# 注意此处的-profile=server 要与ca-config.json中的profile一致
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server-csr.json | cfssljson -bare server