生成自签名证书(不能用于生产环境)
1 2 3 4 5
| openssl req -x509 -nodes \ -days 365 \ -newkey rsa:2048 \ -keyout /root/ssl/nginx.key \ -out /root/ssl/nginx.crt
|
参数说明
-req
请求处理器,用于处理SSL证书的请求。
-x509
指定生成一个X509格式的SSL证书。
-nodes
指定不对生成的SSL证书进行加密。
-days 365
指定证书的有效期为365天
-newkey rsa:2048
创建一个新的2048位的密钥
-keyout /root/ssl/nginx.key
私钥文件
-out /root/ssl/nginx.crt
证书文件
查看证书(网站的ssl证书也可以使用此方法)
1 2
| openssl x509 -in /root/ssl/nginx.crt -noout -dates
|
返回结果
notBefore=Mar 25 18:16:56 2024 GMT
notAfter=Mar 25 18:16:56 2025 GMT
1 2
| openssl x509 -enddate -noout -in /root/ssl/nginx.crt
|
返回结果
notAfter=Mar 25 18:16:56 2025 GMT
检查证书(网站的ssl证书也可以使用此方法)
python脚本,检查证书是否过期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
import subprocess import datetime
domain = "abc.com" today = datetime.datetime.today()
p1 = subprocess.Popen(["openssl", "x509", "-noout", "-enddate", "-in", "/path/ssl/%s/cert.pem" % domain], stdout=subprocess.PIPE) p2 = subprocess.Popen(["grep", "notAfter"], stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() output = p2.communicate()[0].strip()[9:].decode('utf-8')
expire_date = datetime.datetime.strptime(output, '%b %d %H:%M:%S %Y %Z') delta = expire_date - today
if delta.days > 7: print("你的 %s 证书将在 %d 天后过期!" % (domain, delta.days)) elif delta.days <= 0: print(f"你的 {domain} 证书已过期!") else: print(f"你的 {domain} 证书将在 {delta.days} 天内过期,请尽快更新证书!")
|
shell脚本,检查证书是否过期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #!/bin/bash
EXPIRE_DATE=`openssl x509 -enddate -noout -in /path/to/certificate.pem | sed 's/notAfter=//'` CURRENT_DATE=`date +%s` EXPIRE_DATE_SEC=`date +%s -d "$EXPIRE_DATE"`
if [ "$EXPIRE_DATE_SEC" -lt "$CURRENT_DATE" ]; then echo "SSL证书已过期" else echo "SSL证书未过期,有效期至 $EXPIRE_DATE" fi
|