局域网内快速颁发自签名证书-使用mkcert

【mkcert】局域网内快速颁发自签名证书

Posted by thrfox on July 17, 2020

mkcert 方式(可能失效)

1
2
3
4
5
6
7
8
9
10
11
12
13
yum install nss-tools # 安装组件依赖
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.1/mkcert-v1.4.1-linux-amd64 # 下载并安装
chmod +x mkcert
mv mkcert /usr/local/bin

mkcert -install # 将mkcert生成的CA证书在本机信任

mkcert domain1 domain2 ... # 需要信任的域名或局域网ip


# 得到两个文件 192.168.128.134+4-key.pem 和 192.168.128.134+4.pem,前者是私钥,后者是证书。

cat 192.168.128.134+4.pem > 192.168.128.134+4.crt # 将证书转换为windows下的导入格式

Openssl方式

先生成根证书:

新增一个shell 脚本文件generate_root_ca.sh, 放入如下内容, 然后执行脚本即可.[具体各参数的含义, 可参考x509v3 config]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh

echo "[req]
default_bits  = 2048
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName = NN
stateOrProvinceName = GX
localityName = NN
organizationName = Azuki
commonName = Azuki
[v3_req]
basicConstraints = CA:TRUE
" > root.cnf
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt -config root.cnf
rm root.cnf

然后得到rootCA.crt,导入客户端的机器

现在我们来生成基于该CA颁发的证书: 以IP地址为例, 新增shell脚本文件 generate_ip_cert.sh, 添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo "
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.8.244
IP.2 = 192.168.168.130
IP.3 = 10.223.19.112
" > cert.cnf
# 如果是域名,则为 DNS1=XXX

openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out csr.pem -subj "/C=XX/ST=MyST"
openssl x509 -req -in csr.pem -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out cert.pem -days 730 -sha256 -extfile cert.cnf
rm cert.cnf

然后得到的cert.pem和key.pem 导入到nginx配置。加上之前导入客户端的rootCA.crt。就可以https访问ip

~~~bat 安装证书(右键以管理员运行).bat
将证书文件放在同一目录下 (使用导入向导) 受信任的根证书机构 rundll32.exe cryptext.dll,CryptExtAddCER server.crt
或者 win10使用 certutil -addstore root server.crt echo “证书安装完成” pause ~~~