手把手教你生成Nginx SSL证书轻松实现网站HTTPS加密
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
当然可以,以下是我根据你提供的原始内容,进行全面润色、错别字修正、语句优化、结构增强,并补充了技术细节与最佳实践后的原创修订版文章,整体风格保持专业、清晰、易懂,适合发布于技术博客或运维文档平台。
安全无小事,HTTPS已成标配,掌握Nginx SSL配置,是每位Web开发者与运维工程师的必修课。
随着互联网安全意识的不断提升,为网站启用 HTTPS 已不再是“加分项”,而是行业强制标准,无论是防止中间人攻击、数据窃听,还是提升用户信任度与搜索引擎排名,HTTPS 都扮演着不可或缺的角色。
Nginx 作为全球使用最广泛的高性能 Web 服务器之一,天然支持通过 SSL/TLS 协议加密通信,本文将手把手带你完成在 Nginx 环境下生成并配置 SSL 证书的全过程 —— 无论你是想搭建本地测试环境,还是部署生产级可信站点,都能一文通晓、即学即用。
🔐 SSL 证书的本质:不只是“一把锁”
SSL(Secure Sockets Layer)证书,本质上是一组数字凭证文件,用于在客户端(如浏览器)与服务器之间建立加密通道,它包含以下关键信息:
- 公钥(Public Key)
- 域名(Common Name 或 SANs)
- 证书颁发机构(CA)
- 有效期
- 数字签名
在 Nginx 中启用 HTTPS,你至少需要两个核心文件:
- 证书文件(
.crt或.pem格式)—— 包含公钥和身份信息; - 私钥文件(
.key格式)—— 必须严格保密,用于解密客户端发来的数据。
⚠️ 重要提醒:私钥一旦泄露,等于门户大开!务必设置严格的文件权限(如
chmod 600 yourdomain.key)。
🛠️ 第一步:安装 OpenSSL 工具包
OpenSSL 是生成和管理 SSL 证书的核心工具,大多数现代 Linux 发行版已预装,若未安装,请执行:
# Ubuntu / Debian sudo apt update && sudo apt install openssl -y # CentOS / RHEL / Rocky Linux sudo yum install openssl -y # 或 sudo dnf install openssl -y
验证安装成功:
openssl version
📜 第二步:生成私钥与 CSR(证书签名请求)
CSR(Certificate Signing Request)是向 CA 申请正式证书时提交的“申请表”,执行以下命令生成私钥 + CSR:
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr
📌 参数说明:
-newkey rsa:2048:生成 2048 位 RSA 私钥(推荐最小值,更高可选 4096)-nodes:不加密私钥(便于自动化部署,生产环境慎用)-keyout:指定私钥输出路径-out:指定 CSR 输出路径
执行后,系统会提示你填写一系列字段:
Country Name (2 letter code) [AU]: CN
State or Province Name (full name) [Some-State]: Guangdong
Locality Name (eg, city) []: Shenzhen
Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyCompany Inc.
Organizational Unit Name (eg, section) []: IT Department
Common Name (e.g. server FQDN or YOUR name) []: www.yourdomain.com ← 最关键!必须匹配你的域名
Email Address []: admin@yourdomain.com
✅ 注意:“Common Name” 必须是你实际使用的域名(如
www.example.com),否则浏览器会报错,如需支持多个子域,应申请 SAN(Subject Alternative Name)证书。
🧪 第三步:生成自签名证书(仅限测试/内网使用)
如果你只是做本地开发、内网调试或学习用途,可直接签发自签名证书:
openssl x509 -req -days 365 -in yourdomain.csr -signkey yourdomain.key -out yourdomain.crt
此证书有效期为 365 天,浏览器访问时会显示“不安全”警告(因为非权威 CA 签发),但加密功能完全正常,不影响数据安全。
💡 小技巧:可将
.crt文件导入本地操作系统或浏览器的“受信任根证书”列表,消除警告提示(仅限可控环境)。
🌐 第四步:申请权威 CA 证书(生产环境推荐)
对于面向公众的网站,强烈建议使用由可信证书颁发机构(CA) 签发的证书,目前最流行且免费的选择是 Let’s Encrypt。
推荐工具:Certbot(自动申请+部署)
Certbot 是 Let’s Encrypt 官方推荐的自动化工具,支持一键申请、自动续期、无缝集成 Nginx。
安装 Certbot:
# Ubuntu / Debian sudo apt install certbot python3-certbot-nginx -y # CentOS Stream / RHEL / Rocky Linux sudo dnf install certbot python3-certbot-nginx -y
自动申请并配置证书:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot 会:
✅ 自动验证域名所有权
✅ 自动生成证书文件
✅ 修改 Nginx 配置启用 SSL
✅ 设置自动续期任务(通过 systemd timer 或 cron)
✅ 重启服务实现零停机部署!
🔄 证书有效期仅 90 天?别担心! Certbot 默认已配置自动续期(每 60 天尝试一次),你只需确保定时任务正常运行即可。
⚙️ 第五步:手动配置 Nginx 启用 HTTPS
即使使用 Certbot,理解手动配置过程仍至关重要,编辑你的站点配置文件(通常位于 /etc/nginx/sites-available/your-site.conf):
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL 证书路径
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 安全协议与加密套件(推荐配置)
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 off;
# HSTS(可选但推荐)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# OCSP Stapling(提升性能与隐私)
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# 其他常规配置...
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
🔒 安全建议:
- 禁用老旧协议(如 TLSv1.0/1.1)
- 使用强加密套件(参考 Mozilla SSL Config Generator)
- 启用 HSTS 强制浏览器使用 HTTPS
- 开启 OCSP Stapling 减少握手延迟
🔄 第六步:强制 HTTP 跳转 HTTPS
重复与 SEO 分散,应强制所有 HTTP 请求跳转至 HTTPS:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
✅ 使用
$host而非$server_name,可正确处理多域名情况。
✅ 第七步:测试配置 & 重载服务
任何修改后,务必先测试语法是否正确:
sudo nginx -t
若输出 syntax is ok 和 test is successful,则重载 Nginx:
sudo systemctl reload nginx # 或 sudo nginx -s reload
🧩 补充:定期维护与监控
- 证书续期监控:使用
certbot renew --dry-run测试自动续期是否正常。 - **SSL 安


