手把手教你创建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
posted @ 2022-08-06 15:57  ZimskyZeng  阅读(1230)  评论(0编辑  收藏  举报