这是一个小工具,可以生成自签名的证书,并在浏览器或程序中使用,纯shell脚本,调用openssl签发。 常用的场景有两个,一个是自签名https证书,让浏览器或程序信任。一个是双向认证使用,用户带着客户端证书才能正常访问业务。
CA证书直接执行./mk_ca.sh即可,会在ca目录中生成 ca.crt(证书) ca.key(私钥) ca.srl 这几个文件,其中自己的操作系统需要信任ca.crt证书文件。
执行 ./mk_cert.sh test.i.com (将test.i.com换成你想要的域名)生成证书。
Nginx配置证书,只需要把 证书.key 和 证书.crt 配置到Nginx中即可。
server {
listen 443 ssl;
server_name localhost;
ssl_certificate ssl/server.crt; # 配置证书位置
ssl_certificate_key ssl/server.key; # 配置秘钥位置
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
root html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
参考: 制作和使用自签名证书 里面的 配置客户端信任 CA 证书 章节
./mk_cert.sh zhangsan
# 将证书和私钥转换成p12格式,给windows用。p12 证书导入到证书管理器 个人 分类下
openssl pkcs12 -export -in zhangsan.crt -inkey zhangsan.key -out zhangsan.p12server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/your/server.crt;
ssl_certificate_key /path/to/your/server.key;
ssl_client_certificate /path/to/your/ca.crt; # 配置 CA 证书,用于验证客户端证书的签发者
ssl_verify_client on; # 启用客户端证书验证
ssl_crl /path/to/your/crl.pem; # 配置 CRL 文件路径,用于检查吊销的证书
location / {
root /var/www/html;
index index.html;
}
}
如果不想让用户访问,可以吊销他的证书。
./revoke.sh zhangsan吊销完成后,需要把 ca/crl.pem 更新到nginx上并reload nginx才能生效。
吊销列表有默认有效期的,就算你的CA签了100年,证书签了10年,吊销证书到期没有更新,服务器也会拒绝客户端访问的。所以需要在crontab增加一个定期更新crl的任务。
0 1 * * * /root/my_cert/update_crl.sh >> /root/update_crl.log 2>&1或者你也可以在 openssl.cnf 配置文件中,把 default_crl_days 给设置大一点。
如果你本地没有openssl或者版本兼容问题,可以直接使用我制作好的Docker版工具:
# 生成CA
docker run --rm -v ./:/certs/ iuxt/my_cert:latest sh ./mk_ca.sh
# 生成证书
docker run --rm -v ./:/certs/ iuxt/my_cert:latest sh ./mk_cert.sh test.example.com
# 吊销证书
# docker run --rm -v ./:/certs/ iuxt/my_cert:latest sh ./revoke.sh test.example.com