文档中心
NginxHTTPS璇佷功閰嶇疆鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘鎵撻€犲畨鍏ㄥ姞瀵嗙綉绔?txt
时间 : 2025-09-27 16:26:02浏览量 : 2

在当今互联网环境中,HTTPS已经成为网站安全的基础配置。作为最流行的Web服务器之一,Nginx的HTTPS证书配置是每个运维人员必须掌握的技能。本文将用最通俗易懂的方式,带你一步步完成Nginx的HTTPS证书配置,让你的网站告别"不安全"警告。
一、为什么你的网站需要HTTPS?
想象一下,你正在咖啡馆用公共WiFi登录银行网站。如果没有HTTPS:
1. 黑客可以轻松窃取你的账号密码(中间人攻击)
2. 运营商可以在网页里插入广告(流量劫持)
3. 用户会看到浏览器显示的"不安全"警告(降低信任度)
HTTPS通过SSL/TLS协议解决了这些问题:
- 加密传输:像给数据装上了保险箱,只有你和服务器有钥匙
- 身份验证:确认真的是访问银行官网,不是钓鱼网站
- 数据完整性:保证传输过程中没被篡改
二、准备工作:获取SSL证书的三种方式
1. 免费证书 - Let's Encrypt(适合个人和小型企业)
```bash
使用Certbot工具自动获取(以Ubuntu为例)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
```
这个命令会自动:
- 验证域名所有权
- 生成证书文件
- 修改Nginx配置
2. 商业证书 - DigiCert/Symantec等(适合企业级应用)
特点:
- 提供更高额度的保修赔偿(如100万美元保障)
- 支持更复杂的验证方式(OV/EV证书显示公司名称)
- CA机构会人工审核企业资质
3. 自签名证书(仅限测试环境使用)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/selfsigned.key \
-out /etc/ssl/certs/selfsigned.crt
注意:浏览器会显示安全警告,不适合生产环境!
三、Nginx配置详解(以Let's Encrypt为例)
典型的配置文件`/etc/nginx/sites-available/yourdomain.com`内容如下:
```nginx
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
SSL证书路径(Certbot自动生成)
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
SSL性能优化参数
ssl_protocols TLSv1.2 TLSv1.3;
禁用不安全的TLS1.0/1.1
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
HSTS头(强制HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
...其他站点配置...
}
HTTP强制跳转HTTPS
listen 80;
return 301 https://$host$request_uri;
关键参数说明:
- `fullchain.pem`包含服务器证书+中间CA证书链
- `privkey.pem`是绝对不能泄露的私钥文件
- TLS1.3比TLS1.2性能提升40%以上
四、常见问题排查指南
Q1: Nginx报错"SSL_CTX_use_PrivateKey_file"错误?
?检查项:
1. 确保证书和私钥路径正确
2. key文件权限是否为600:
```bash
chmod 600 /etc/ssl/private/*.key
```
3. key与cert是否匹配:
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in priv.key | openssl md5
(两个MD5值必须相同)
Q2: Chrome显示"您的连接不是私密连接"?
可能原因:
- 时间不同步:服务器时间偏差超过5分钟
```bash
date && sudo ntpdate pool.ntp.org
TAG:nginx https证书配置,nginx配置cer证书,nginx配置pem证书,nginx证书链