ssl证书申请及配置
一、自签名SSL证书
1.1 创建自签名 SSL 证书
自签名证书适合测试、内网环境使用(浏览器会提示 “不安全”,但通信本身是加密的)。
1.1.1 前提条件
确保服务器已安装 openssl 和 nginx:本篇nginx为源码安装,因此nginx的配置目录可能有所不同
# CentOS/RHEL 系统yum install -y openssl nginx
# Ubuntu/Debian 系统apt update && apt install -y openssl nginx1.1.2 创建证书存放目录
# 创建目录,建议将证书放在 /etc/nginx/ssl 下mkdir -p /usr/local/nginx/sslcd /usr/local/nginx/ssl1.1.3 生成自签名证书
执行以下命令生成私钥(key)和证书(crt),过程中会提示输入信息,直接按回车默认即可(测试环境无需填写真实信息):
# 生成有效期 3650 天(10 年)的自签名证书openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt- 命令参数解释:
-x509:生成自签名证书(而非证书请求);-nodes:私钥不加密(避免 Nginx 启动时需要输入密码);-days 3650:证书有效期 10 年;-newkey rsa:2048:同时生成 2048 位 RSA 私钥;server.key:生成的私钥文件;server.crt:生成的证书文件。
1.1.5 设置证书权限(关键!避免 Nginx 无权读取)
# 仅 root 用户可读写,Nginx 进程(www-data/nginx 用户)可读chmod 600 /usr/local/nginx/ssl/server.keychmod 644 /usr/local/nginx/ssl/server.crtchown root:root /usr/lcoal/nginx/ssl/*1.2 配置 Nginx 启用 HTTPS
1.2.1 编辑 Nginx 配置文件
Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加如下内容:
user root;worker_processes auto;error_log logs/error.log;pid /run/nginx.pid;
events { worker_connections 1024;}
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; keepalive_timeout 65; types_hash_max_size 4096;
include mime.types; default_type application/octet-stream;
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
include conf.d/*.conf;}1.2.2 编辑虚拟主机
进入/usr/local/nginx/conf/conf.d/目录下创建虚拟主机文件static_web.conf,添加如下内容:
server { # 监听 443 端口(HTTPS 默认端口) listen 443 ssl; # 你的域名/服务器IP(需和证书一致) server_name _;
# 证书文件路径 ssl_certificate /usr/local/nginx/ssl/server.crt; # 私钥文件路径 ssl_certificate_key /usr/local/nginx/ssl/server.key;
# 可选:优化 SSL 配置(提升安全性和性能) ssl_protocols TLSv1.2 TLSv1.3; # 仅启用安全的 TLS 版本 ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m;
# 网站根目录(根据你的实际路径修改) root /usr/local/nginx/html; index index.html index.htm;
}
# 将 HTTP(80 端口)请求重定向到 HTTPSserver { listen 80; server_name _; return 301 https://$host$request_uri;}主要修改:证书和公钥的配置
1.2.3 检查 Nginx 配置重启
nginx -t如果输出 nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置无错;否则根据提示修正。
# 重启systemctl restart nginx# 设置开机自启(可选)systemctl enable nginx1.3 验证 HTTPS 访问
- 打开浏览器,访问
https://你的服务器IP/或https://your_domain.com/; - 浏览器会提示 “证书不受信任”(自签名证书的正常现象),点击 “高级”→“继续访问”(不同浏览器表述略有差异);
- 页面能正常加载,且地址栏显示 “锁形” 图标(部分浏览器显示 “不安全”,但锁形图标仍在),说明 HTTPS 配置成功。
1.4 注意事项
- 自签名证书的局限性:仅适合测试 / 内网,公网环境需使用 Let’s Encrypt 免费证书(可自动续期,浏览器信任);
- 端口放行:确保服务器防火墙 / 安全组放行 443 端口(HTTPS)和 80 端口(HTTP 重定向);
- 证书路径:配置文件中证书路径必须绝对正确,否则 Nginx 启动失败;
- 权限问题:Nginx 进程用户(通常是
nginx或www-data)必须能读取证书文件(server.crt需 644 权
二、Let’s Encrypt免费证书申请
2.1 为什么选择Let’s Encrypt?
在网络安全威胁日益严峻的今天,SSL/TLS证书已成为网站标配。传统商业证书年费动辄数百美元,而Let’s Encrypt通过自动化流程向全球提供免费的DV域名验证证书,其核心优势体现在:
- 完全免费:无隐藏费用,支持无限次申请
- 全自动化:90天自动更新机制消除手动维护成本
- 行业认可:证书由非营利组织ISRG签发,被所有主流浏览器信任
- 广泛兼容:支持RSA 2048/4096及ECC加密算法
2.2 证书类型与适用场景
Let’s Encrypt主要提供三种证书类型:
- 单域名证书:适用于单个域名(如example.com)
- SAN证书:支持多域名(Subject Alternative Name),最多可包含100个域名
- 通配符证书:使用
*.example.com格式保护所有子域名
通配符证书特别适合以下场景:
- 动态子域名系统(如用户自定义域名)
- 微服务架构中的多服务部署
- 需要频繁添加子域名的开发环境
2.3 申请前的准备工作
2.3.1 服务器环境要求
- 公开可访问的域名(需完成DNS解析)
- 运行中的Web服务器(Nginx/Apache等)
- 服务器时间同步(建议配置NTP服务)
- 80/443端口开放(用于ACME协议验证)
2.3.2 验证方式选择
Let’s Encrypt支持两种验证方式:
- HTTP-01验证:在网站根目录放置验证文件
- DNS-01验证:通过添加TXT记录完成验证
对于通配符证书,必须使用DNS-01验证方式。建议提前在DNS服务商处配置API访问权限,以便实现自动化验证。
2.4 Certbot自动化部署指南
2.4.1 安装Certbot
2.4.1.1 Ubuntu/Debian系统:
sudo apt updatesudo apt install certbot python3-certbot-nginx # Nginx用户sudo apt install certbot python3-certbot-apache # Apache用户2.4.1.2 CentOS/RHEL系统:
yum install epel-releaseyum install certbot python3-certbot-nginx2.4.2 获取证书(以Nginx为例)
sudo certbot --nginx -d example.com -d www.example.com命令执行后,Certbot会自动:
- 验证域名所有权
- 生成私钥和证书
- 修改Nginx配置添加HTTPS
- 设置自动重定向(可选)
2.4.3 测试配置
sudo nginx -t # 测试配置语法sudo systemctl reload nginx # 重新加载配置2.5 进阶使用场景
2.5.1 通配符证书申请
使用DNS插件实现自动化验证(以Cloudflare为例):
sudo apt install certbot python3-certbot-dns-cloudflare创建/etc/letsencrypt/cloudflare.ini配置文件:
dns_cloudflare_email = your@email.comdns_cloudflare_api_key = your_api_key执行申请命令:
sudo certbot certonly --dns-cloudflare \-d "*.example.com" \--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini2.5.2 多服务器证书共享
对于负载均衡环境,建议:
- 在主服务器生成证书
- 使用
certbot certificates命令查看证书路径 - 通过rsync同步证书文件到其他服务器
- 配置统一的cron任务进行更新
2.6 证书更新与续期策略
Let’s Encrypt证书有效期为90天,建议设置自动更新:
2.6.1 测试更新流程
sudo certbot renew --dry-run2.6.2 配置自动更新
编辑crontab:
sudo crontab -e添加以下内容(建议每周一凌晨3点执行):
30 3 * * 1 /usr/bin/certbot renew --quiet --no-self-upgrade2.6.3 更新后处理
自动更新后可能需要:
- 重新加载Web服务器
- 通知依赖证书的服务(如邮件服务器)
- 验证证书生效时间
2.7 安全实践与故障排除
2.7.1 最佳安全实践
- 定期轮换账户密钥(每年至少一次)
- 限制证书私钥的访问权限(600权限)
- 启用OCSP Stapling提升连接速度
- 配置HSTS头强制HTTPS访问
2.7.2 常见问题解决
问题1:验证失败
- 检查DNS记录是否生效
- 确认服务器防火墙未阻止80/443端口
- 检查Web服务器配置是否正确
问题2:证书未自动更新
- 检查cron任务是否正常运行
- 查看
/var/log/letsencrypt/日志文件 - 确认系统时间是否准确
问题3:通配符证书申请失败
- 检查DNS API密钥权限
- 确认TXT记录已全球生效(使用
dig TXT _acme-challenge.example.com验证)
2.8 性能优化建议
- ECC证书选择:使用
--key-type ec参数生成更高效的ECC证书 - 证书链优化:确保包含完整的中间证书(通过
-d参数指定) - 会话恢复:在Web服务器中启用TLS会话票证
- 协议版本:禁用不安全的TLS 1.0/1.1,强制使用TLS 1.2+
2.9 监控与告警设置
建议配置监控系统跟踪:
- 证书过期时间(通过
openssl x509 -noout -enddate -in /path/to/cert.pem) - HTTPS可用性(使用工具如UptimeRobot)
- 协议版本合规性(通过SSL Labs测试)
当证书剩余有效期少于30天时,应触发告警通知管理员。
2.10 替代方案对比
对于特殊需求场景,可考虑:
- ZeroSSL:提供图形界面,适合非技术用户
- BuyPass Go SSL:免费证书有效期延长至180天
- AWS ACM:对AWS用户提供完全免费的证书管理
三、zeroSSL免费证书申请
3.1 注册账号
3.2 创建证书
登录账号后,可以看到自身账号的数量,点击new certificate创建证书

填写ip或域名,zerossl支持申请纯ip及域名格式的证书

选择证书期限,选择90天免费证书

取消附加组件,否则会收费

取消自动获取商业证书,下一步

选择机密类型,默认即可

直接下一步,不用选择任何计划


提示这个,说明证书创建成功
3.3 验证服务器
之后根据提示,选择验证服务器的方式,将证书上传至服务器中

3.4 证书使用示例

下载的证书有这三个,nginx使用时需要将ca_bundle.crt导入到certificate.crt中,之后在nginx中,ssl_certificate指向certificate.crt,ssl_certificate_key指向private.key即可
cat ca_bundle.crt >> certificate.crt文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
赣公网安备36072602000131号