自签名 SSL 证书
大约 3 分钟
自签名 SSL 证书
一、openssl命令生成
1、生成私钥
生成2048位的RSA私钥,并作为CA私钥
# private_cakey.key为生成的私钥文件名,支持自定义
openssl genrsa -out private_cakey.key 2048

2、颁发证书
自己作为数字证书颁发机构,自己颁发数字证书
# -days 365是证书的有效期,cacert.pem是证书的文件名称支持自定义
openssl req -new -x509 -days 365 -key private_cakey.key -out cacert.crt

3、使用
自签名的证书和正规购买的证书使用没什么差别,配置nginx或者自己代码里配置即可。
使用之后浏览器还是会认为是不安全的,因为不是正规CA机构签发的。

Windows系统直接点击高级,继续访问就行了
Mac系统的chrome浏览器没有高级选项,直接对着键盘输入thisisunsafe即可访问
二、使用cfssl自签证书
注
该方法多用于k8s上签发证书,cfssl是需要安装的
下载地址:https://github.com/cloudflare/cfssl/releases
1、安装cfssl
需要下载cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64 这三个文件
# 下载
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
# 移动到 /usr/bin 目录下 (这里是放在/usr/bin下很多博客说放在/usr/local/bin下,我试了不行)
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
# 出现如下版本信息
Version: 1.2.0
Revision: dev
Runtime: go1.6
2、 初始化ca-csr.json
cfssl print-defaults csr > ca-csr.json
修改json文件,内容如下:
{
"CN": "demo",
"hosts": [
"127.0.0.1",
"*.necc.xyz"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "guangdong",
"L": "shenzhen",
"O": "pibao",
"OU": "jishu"
}
]
}
字段解释:
- CN:Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
- hosts: 主机名(域名)或者IP可以使用此csr申请的证书
- key:生成证书的算法
- names:基本信息
- C :国家
- ST:省份
- L:地区、城市
- O:公司
- OU:部门
3、 生成CA证书和CA私钥和CSR
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

执行完毕后会生成如下几个文件,就可以之间使用了
-rw-r--r-- 1 root root 1005 Jun 26 09:47 ca.csr
-rw-r--r-- 1 root root 210 Jun 26 09:45 ca-csr.json
-rw------- 1 root root 1675 Jun 26 09:47 ca-key.pem
-rw-r--r-- 1 root root 1363 Jun 26 09:47 ca.pem
其他命令
# 使用现有私钥, 重新生成
cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssljson -bare ca
# 查看cert(证书信息)
cfssl certinfo -cert ca.pem
# 查看CSR(证书签名请求)信息
cfssl certinfo -csr ca.csr
如果需要签发其他证书,就把ca-csr.json复制一份,比如:cp ca-csr.json demo-csr.json,然后修改对于的内容,最后执行cfssl gencert -initca demo-csr.json | cfssljson -bare demo即可