0%

创建自签名证书几种方式

一、使用cfssl工具创建自签名证书

环境准备

  1. 确保已安装 cfsslcfssljson。可以通过以下命令安装

    1
    2
    3
    4
    5
    6
    # 下载 cfssl 和 cfssljson 可执行文件
    wget -O /usr/local/bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    wget -O /usr/local/bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

    # 赋予执行权限
    chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson

步骤 1:生成根 CA 证书

首先创建一个自签名根 CA 证书,这可以用于签发后续的服务端证书。

  1. 创建 CA 配置文件 ca-config.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
    "signing": {
    "default": {
    "expiry": "867240h"
    },
    "profiles": {
    "www": {
    "expiry": "867240h",
    "usages": ["signing", "key encipherment", "server auth", "client auth"]
    }
    }
    }
    }

    注意文件中的证书失效时间。

    2.创建 CA 请求文件 ca-csr.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    {
    "CN": "My CA",
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "US",
    "L": "San Francisco",
    "O": "My Organization",
    "OU": "My Org Unit",
    "ST": "California"
    }
    ]
    }

    3.使用cfssl生成CA证书和私钥:

    1
    cfssl gencert -initca ca-csr.json | cfssljson -bare ca

步骤 2:生成 NGINX 服务器证书

  1. 创建服务器证书的请求文件 server-csr.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    {
    "CN": "my-nginx-server",
    "hosts": [
    "example.com",
    "www.example.com",
    "localhost",
    "127.0.0.1"
    ],
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "US",
    "L": "San Francisco",
    "O": "My Organization",
    "OU": "My Org Unit",
    "ST": "California"
    }
    ]
    }

    注意配置文件中的hosts字段要包含域名。

2.使用 cfssl 生成服务器证书:

1
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

生成的文件包括:

  • server.pem: 服务器证书
  • server-key.pem: 服务器私钥

二、使用openssl创建自签名证书

1.创建 CA 私钥

1
$ openssl genrsa -out ca.key 2048

2.生成 CA 的自签名证书

1
2
3
4
5
6
7
openssl req \
-subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=Server CA/emailAddress=test@mochasoft.com.cn" \
-new \
-x509 \
-days 36500 \
-key ca.key \
-out ca.crt

注意生成证书的有效期

3.生成需要颁发证书的私钥

1
$ openssl genrsa -out server.key 2048

4.生成要颁发证书的证书签名请求,证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name

1
2
3
4
5
$ openssl req \
-subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=test2.sslpoc.com/emailAddress=test@mochasoft.com.cn" \
-new \
-key server.key \
-out server.csr

5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名

1
2
3
4
5
6
7
8
$ openssl x509 \
-req \
-days 3650 \
-in server.csr \
-CA ca.crt \
-CAkey ca.key \
-set_serial 01 \
-out server.crt