自动化管理SSL证书不仅省时,还不容易出错,尤其是在管理多个域名和服务器时表现明显。下面我将介绍如何使用工具和脚本自动化SSL证书的申请和续期,确保你的网站部署SSL证书有效。
1. 使用Let's Encrypt和Certbot
Let's Encrypt是一个免费的、自动化的、开放的证书颁发机构(CA),它提供了自动化工具Certbot来简化SSL证书的申请和续期。
1.1 安装Certbot
首先,你需要在服务器上安装Certbot。以下是一些常见操作系统的安装命令:
Ubuntu/Debian**:
bash
sudo apt update
sudo apt install certbot python3-certbot-nginx # 对于Nginx
sudo apt install certbot python3-certbot-apache # 对于Apache
CentOS/RHEL:
bash
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx # 对于Nginx
sudo yum install certbot python3-certbot-apache # 对于Apache
macOS:
bash
brew install certbot
1.2 申请SSL证书
使用Certbot申请SSL证书非常简单。以下是一些常见的使用场景:
Nginx:
bash
sudo certbot --nginx
Apache:
bash
sudo certbot --apache
手动模式(适用于其他Web服务器):
bash
sudo certbot certonly --manual
Certbot会自动配置你的Web服务器,并申请SSL证书。
1.3 自动化续期
Let's Encrypt的证书有效期为90天,因此需要定期续期。Certbot提供了一个自动续期的命令:
bash
sudo certbot renew
你可以将这个命令添加到cron作业中,以实现自动化续期。编辑cron表:
bash
sudo crontab -e
添加以下行,每天凌晨2点检查并续期证书:
bash
0 2 * * * /usr/bin/certbot renew --quiet
2. 使用acme.sh
[acme.sh](https://github.com/acmesh-official/acme.sh) 是一个纯Shell脚本,用于自动化SSL证书的申请和续期。它支持多种DNS API,适合在无Web服务器的情况下使用。
2.1 安装acme.sh
bash
curl https://get.acme.sh | sh
2.2 申请SSL证书
使用acme.sh申请SSL证书非常简单。以下是一个使用DNS API的例子:
bash
export Ali_Key="your_ali_key"
export Ali_Secret="your_ali_secret"
acme.sh --issue --dns dns_ali -d example.com -d www.example.com
2.3 自动化续期
acme.sh会自动添加cron作业,定期检查并续期证书。你无需手动操作。
3. 使用Traefik
[Traefik](https://traefik.io/) 是一个现代化的反向代理和负载均衡器,支持自动化的SSL证书管理。
3.1 配置Traefik
在Traefik的配置文件中,启用Let's Encrypt支持:
yaml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
myresolver:
acme:
email: your-email@example.com
storage: acme.json
httpChallenge:
entryPoint: web
3.2 部署服务
在部署服务时,指定证书解析器:
yaml
http:
routers:
myrouter:
rule: "Host(`example.com`)"
service: myservice
tls:
certResolver: myresolver
Traefik会自动申请和续期SSL证书。
4. 使用Kubernetes和Cert-Manager
如果你在Kubernetes集群中运行服务,可以使用[Cert-Manager](https://cert-manager.io/) 来自动化管理SSL证书。
4.1 安装Cert-Manager
bash
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
4.2 配置ClusterIssuer
创建一个ClusterIssuer资源,用于与Let's Encrypt交互:
yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
http01:
ingress:
class: nginx
4.3 申请证书
在Ingress资源中指定证书:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
hosts:
example.com
secretName: example-com-tls
rules:
host: example.com
http:
paths:
path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Cert-Manager会自动申请和续期SSL证书。
上面就是自动化申请和续费SSL证书的步骤和方法,学会上述方法可以大大简化运维工作,确保你的网站始终使用有效的SSL证书。