ssl新闻资讯

文档中心

NginxHTTPS璇佷功瀵煎叆鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘閰嶇疆瀹夊叏鍔犲瘑缃戠珯

时间 : 2025-09-27 16:25:58浏览量 : 2

2NginxHTTPS璇佷功瀵煎叆鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘閰嶇疆瀹夊叏鍔犲瘑缃戠珯

在今天的互联网环境中,HTTPS已经不再是可选项,而是保护用户数据和提升网站可信度的必备措施。作为最流行的Web服务器之一,Nginx的HTTPS配置是每个运维和安全人员的必修课。本文将用最通俗易懂的方式,带你一步步完成Nginx的HTTPS证书导入全过程。

一、HTTPS证书基础知识

在开始操作前,我们需要了解几个关键概念:

1. SSL/TLS证书:就像网站的"身份证",证明"你访问的确实是xx银行官网,而不是钓鱼网站"。常见的证书类型包括DV(域名验证)、OV(组织验证)和EV(扩展验证)。

2. 证书链:想象成"信任链条",你的证书需要被上级CA(证书颁发机构)签名,而CA的证书又需要被更高级的CA签名,直到根证书。

3. 密钥对:包括公钥(可以公开)和私钥(必须严格保密)。就像一把锁和钥匙的关系,公钥加密的数据只能用对应的私钥解密。

二、获取HTTPS证书的三种方式

1. 商业CA购买

比如DigiCert、GlobalSign等机构颁发的证书。特点是浏览器100%信任,但需要付费。适合企业官网、电商平台等场景。

2. Let's Encrypt免费证书

通过ACME协议自动签发,每90天需要续期一次。技术社区的最爱,适合个人博客和小型网站。示例命令:

```bash

sudo certbot --nginx -d example.com

```

3. 自签名证书

自己当CA给自己发证(就像自己写奖状给自己)。浏览器会显示警告,仅适用于内部测试环境。生成命令示例:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \

-keyout /etc/ssl/private/selfsigned.key \

-out /etc/ssl/certs/selfsigned.crt

三、Nginx配置HTTPS详细步骤

假设我们已经获得了以下文件:

- `example.com.crt`(主证书文件)

- `example.com.key`(私钥文件)

- `ca_bundle.crt`(中间证书链文件)

步骤1:合并证书链

将主证书和中间证书合并成一个文件(顺序很重要):

cat example.com.crt ca_bundle.crt > combined.crt

步骤2:上传文件到服务器

推荐存放路径:

/etc/ssl/certs/combined.crt

合并后的证书

/etc/ssl/private/example.com.key

私钥

?? 安全提示:确保私钥权限设置为600(仅root可读写):

chmod 600 /etc/ssl/private/example.com.key

步骤3:修改Nginx配置

编辑站点配置文件(通常在`/etc/nginx/sites-available/`目录下):

```nginx

server {

listen 443 ssl;

server_name example.com www.example.com;

ssl_certificate /etc/ssl/certs/combined.crt;

ssl_certificate_key /etc/ssl/private/example.com.key;

TLS协议优化配置

ssl_protocols TLSv1.2 TLSv1.3;

禁用不安全的TLS1.0/1.1

ssl_prefer_server_ciphers on;

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

HSTS头(强制HTTPS)

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

...其他配置...

}

步骤4:HTTP强制跳转HTTPS

在80端口的server块中添加跳转规则:

listen 80;

return 301 https://$host$request_uri;

步骤5:测试并重载配置

先测试配置是否正确:

sudo nginx -t

无误后重载Nginx:

sudo systemctl reload nginx

四、常见问题排查指南

? 问题1:"SSL_ERROR_RX_RECORD_TOO_LONG"错误

?? 原因:可能把HTTP流量发到了HTTPS端口或反之

?? 解决:检查listen指令是否有ssl关键字

? 问题2:"NET::ERR_CERT_AUTHORITY_INVALID"

?? 原因:中间证书缺失或不完整

?? 解决:用SSL Labs工具检测并修复证书链

? 问题3:"SSL handshake failed"

?? 原因:客户端和服务端支持的TLS版本不匹配

?? 解决:调整ssl_protocols配置项

五、高级安全加固建议

1. 启用OCSP Stapling :减少客户端验证延迟的同时保护隐私

```nginx

ssl_stapling on;

ssl_stapling_verify on;

```

2. 使用更安全的密钥算法 :Ed25519优于RSA2048

```bash

openssl genpkey -algorithm ED25519 -out privkey.pem

3. 定期轮换密钥 :即使私钥未被泄露也应定期更换

4. 监控到期时间 :用脚本自动检测即将过期的证书

通过以上步骤,你的Nginx服务器就已经武装上了行业标准的HTTPS防护。记住在网络安全领域,"不安全的默认值"是最大的敌人之一——每个安全特性都需要我们主动去开启和配置!

TAG:Nginx.+https证书导入,nginx证书链,nginx部署ssl证书,nginx配置cer证书