centos下使用cfssl生成ssl证书

安装ssl

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/bin/cfssl
mv cfssljson_linux-amd64 /usr/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
cfssl version

证书类型

client certificate: 用于服务端认证客户端,例如etcdctl、etcd proxy、fleetctl、docker客户端
server certificate: 服务端使用,客户端以此验证服务端身份,例如docker服务端、kube-apiserver
peer certificate: 双向证书,用于etcd集群成员间通信

初始化json文件

  生成json模板文件

cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json

自签CA

编辑 ca-config.json 

  • profiles:指定了不同角色的配置信息
    服务端使用server auth(TLS Web Server Authentication X509 V3 extension),客户端使用client auth(TLS Web Server Authentication X509 V3 extension)
  • expiry:指定了证书的过期时间为87600小时(即10年)
{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "client": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "server": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "peer": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}

自定义ca-csr.json

  • CN即common name,hosts可以指定多个(泛)域名以及多个IP地址
  • key:指定了加密算法,一般使用rsa(size:2048)

 

{
    "CN": "example.net",
    "hosts": [
        "example.net",
        "www.example.net",
        "127.0.0.1"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

生成CA证书和私钥

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

生成ca.pem、ca.csr、ca-key.pem(CA私钥,需妥善保管)

生成服务器和客户端证书

同样,首先生成默认配置文件:

cfssl print-defaults csr > json/server.json

修改如下部分:

"CN": "test.coreos.com",
"hosts": [
	"server.coreos.org",
	"*.coreos.org"
],
  • cfssl支持SAN(Subject Alternative Name),它是X.509中定义的一个扩展,使用了SAN字段的SSL证书,可以扩展此证书支持的域名,即一个证书可以支持多个不同域名的解析。
  • 然后使用刚才生成的CA来给服务器签署证书,运行如下命令来生成服务端证书:

      cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=json/ca-config.json -profile=server json/server.json | cfssljson -bare server

  • -profile指定了使用ca-config.json中的profile
  • 最后的server给定了生成的文件名,将得到如下三个文件:server.csr、server-key.pem和server.pem
  •    类似的,可以生成客户端证书,配置文件的hosts字段指定为空即可

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=json/ca-config.json -profile=client json/client.json | cfssljson -bare client

参考文章 https://blog.csdn.net/DXZCZH/article/details/86388869

你可能感兴趣的:(centos下使用cfssl生成ssl证书)