在Linux环境下配置HTTPS协议,使用Let's Encrypt与Certbot组合已成为主流方案,既能实现免费证书管理,又能通过自动化工具简化运维流程。
前期准备****
部署前需满足以下条件:
1. 拥有已备案的域名,并完成DNS解析至服务器IP
2. 服务器已安装Nginx或Apache(以Ubuntu 22.04为例)
3. 开放80端口(用于验证)和443端口(HTTPS服务)
安装Certbot****
根据Web服务器类型选择安装方式:
bash
| # Nginx用户 | |
|---|---|
| sudo apt update | |
| sudo apt install certbot python3-certbot-nginx | |
| # Apache用户 | |
| sudo apt install certbot python3-certbot-apache |
对于CentOS/RHEL系统,需先启用EPEL仓库:
bash
| sudo yum install epel-release | |
|---|---|
| sudo yum install certbot python3-certbot-nginx |
证书申请与配置****
单域名证书****
执行以下命令自动申请并配置证书:
bash
| sudo certbot --nginx -d example.com -d www.example.com |
|---|
或分步操作:
bash
| # 仅申请证书 | |
|---|---|
| sudo certbot certonly --nginx -d example.com | |
| # 手动配置Nginx | |
| sudo nano /etc/nginx/sites-available/example.com |
在配置文件中添加:
nginx
| server { | |
|---|---|
| listen 443 ssl; | |
| server_name example.com; | |
| ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; | |
| ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; | |
| # 其他配置... | |
| } |
泛域名证书****
需使用DNS验证方式:
bash
| sudo certbot certonly --manual --preferred-challenges dns \ | |
|---|---|
| -d "*.example.com" -d example.com |
根据提示在DNS服务商处添加_acme-challenge TXT记录,验证通过后证书将自动生成。
证书自动续期****
Let's Encrypt证书有效期为90天,需配置自动续期:
bash
| # 测试续期流程 | ||
|---|---|---|
| sudo certbot renew --dry-run | ||
| # 添加cron任务(每天凌晨3点执行) | ||
| (crontab -l 2>/dev/null; echo "0 3 * * * /usr/bin/certbot renew --quiet") | crontab - |
对于Nginx用户,可添加续期后重启服务命令:
bash
| 0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx" |
|---|
验证配置****
访问example.com,浏览器地址栏应显示绿色锁形图标。使用以下命令检查Nginx配置:
bash
| sudo nginx -t | |
|---|---|
| sudo systemctl restart nginx |
高级配置建议****
1. 强制HTTPS跳转:
nginx
| server { | |
|---|---|
| listen 80; | |
| server_name example.com; | |
| return 301 https://request_uri; | |
| } |
1. OCSP Stapling:
nginx
| ssl_stapling on; | |
|---|---|
| ssl_stapling_verify on; | |
| resolver 8.8.8.8 8.8.4.4 valid=300s; | |
| resolver_timeout 5s; |
1. 证书吊销:
bash
| sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/fullchain.pem |
|---|
通过该方案,可实现从证书申请到自动续期的全流程自动化管理,有效降低HTTPS部署成本与运维复杂度。