自动化管理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证书。