本文目录导读:

我来介绍几种自动生成和更新Nginx SSL证书的方法:
使用Let's Encrypt(推荐)
安装Certbot
# Ubuntu/Debian sudo apt update sudo apt install certbot python3-certbot-nginx # CentOS/RHEL sudo dnf install certbot python3-certbot-nginx
自动获取证书脚本
#!/bin/bash
DOMAIN="yourdomain.com"
EMAIL="admin@yourdomain.com"
# 申请证书
sudo certbot --nginx -d $DOMAIN --email $EMAIL --agree-tos --non-interactive
# 验证证书是否成功
if [ -f "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" ]; then
echo "SSL证书生成成功!"
else
echo "证书生成失败!"
exit 1
fi
自动续期脚本
#!/bin/bash # 续期所有证书 sudo certbot renew --nginx --non-interactive # 重启Nginx应用新证书 sudo systemctl reload nginx # 记录日志 echo "$(date): 证书续期完成" >> /var/log/certbot-renew.log
使用acme.sh(轻量级方案)
安装acme.sh
curl https://get.acme.sh | sh
自动生成证书脚本
#!/bin/bash
DOMAIN="yourdomain.com"
EMAIL="admin@yourdomain.com"
# 设置默认CA为Let's Encrypt
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
# 申请证书
~/.acme.sh/acme.sh --issue -d $DOMAIN \
--nginx \
--email $EMAIL \
--keylength ec-256
# 安装证书到Nginx目录
~/.acme.sh/acme.sh --install-cert -d $DOMAIN \
--key-file /etc/nginx/ssl/$DOMAIN.key \
--fullchain-file /etc/nginx/ssl/$DOMAIN.crt \
--reloadcmd "systemctl reload nginx"
echo "SSL证书已安装到 /etc/nginx/ssl/"
自签名证书(测试环境)
自动生成自签名证书脚本
#!/bin/bash
DOMAIN="localhost"
DAYS=365
KEY_SIZE=2048
SSL_DIR="/etc/nginx/ssl"
# 创建SSL目录
sudo mkdir -p $SSL_DIR
# 生成私钥
sudo openssl genrsa -out $SSL_DIR/$DOMAIN.key $KEY_SIZE
# 生成CSR(证书签名请求)
sudo openssl req -new -key $SSL_DIR/$DOMAIN.key \
-out $SSL_DIR/$DOMAIN.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=$DOMAIN"
# 生成自签名证书
sudo openssl x509 -req -days $DAYS \
-in $SSL_DIR/$DOMAIN.csr \
-signkey $SSL_DIR/$DOMAIN.key \
-out $SSL_DIR/$DOMAIN.crt
# 设置权限
sudo chmod 600 $SSL_DIR/$DOMAIN.key
sudo chmod 644 $SSL_DIR/$DOMAIN.crt
echo "自签名证书已生成:"
echo "证书:$SSL_DIR/$DOMAIN.crt"
echo "私钥:$SSL_DIR/$DOMAIN.key"
完整的自动化部署脚本
#!/bin/bash
# 配置变量
DOMAIN="yourdomain.com"
EMAIL="admin@yourdomain.com"
NGINX_CONFIG="/etc/nginx/conf.d/$DOMAIN.conf"
SSL_DIR="/etc/nginx/ssl"
# 创建SSL目录
echo "创建SSL目录..."
mkdir -p $SSL_DIR
# 安装Certbot
echo "安装Certbot..."
if command -v apt-get &> /dev/null; then
apt-get update
apt-get install -y certbot python3-certbot-nginx
elif command -v yum &> /dev/null; then
yum install -y certbot python3-certbot-nginx
fi
# 生成Nginx配置(HTTP版本用于验证)
echo "创建Nginx配置..."
cat > $NGINX_CONFIG << EOF
server {
listen 80;
server_name $DOMAIN;
root /var/www/html;
index index.html;
}
EOF
# 启动Nginx
systemctl start nginx
systemctl enable nginx
# 获取SSL证书
echo "获取SSL证书..."
certbot --nginx -d $DOMAIN --email $EMAIL --agree-tos --non-interactive
if [ $? -eq 0 ]; then
echo "SSL证书获取成功!"
else
echo "SSL证书获取失败,尝试手动配置..."
exit 1
fi
# 更新Nginx配置为HTTPS
echo "更新Nginx配置..."
cat > $NGINX_CONFIG << EOF
server {
listen 443 ssl http2;
server_name $DOMAIN;
ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name $DOMAIN;
return 301 https://\$server_name\$request_uri;
}
EOF
# 测试并重载Nginx
nginx -t && systemctl reload nginx
echo "部署完成!"
echo "访问 https://$DOMAIN 查看效果"
定时自动续期
# 添加到crontab sudo crontab -e # 添加以下行(每天检查一次) 0 0,12 * * * /usr/bin/certbot renew --quiet --nginx --non-interactive && systemctl reload nginx
注意事项
- Let's Encrypt证书有效期为90天,需要定期续期
- 生产环境务必使用有效的域名,并确保DNS解析正确
- 防火墙需要开放443端口
- 定期检查证书过期时间:
openssl x509 -enddate -noout -in /path/to/certificate.crt
选择哪种方法取决于你的具体需求:
- 生产环境:推荐Let's Encrypt或acme.sh
- 测试环境:可以用自签名证书
- 内网环境:考虑搭建内部CA服务器
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播