Nginx配置ssl证书(中间证书)

  在Nginx下配置ssl证书,默认的配置文件,在pc浏览器中正常访问,在手机浏览器中无法认证

一 Nginx配置方式

 

    ssl on;
    ssl_certificate      /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key  /etc/nginx/ssl/private.key;

二 证书文件:

 默认证书文件共三个: 由免费证书网站生成 https://www.sslforfree.com/

ca_bundle.crt

certificate.crt

private.key

三 问题:

证书未中间证书,不包含根证书,手机浏览器上无法认证

四 解决方式:

1 根据中间证书生成根证书

 中间证书下载工具: https://www.myssl.cn/tools/downloadchain.html

根据certificate.crt 中的内容 下载 中间证书

2 重新编辑服务器证书

内容依次为: 不能有空格及空行 ,通过vi工具看查看是否有非法操作符或回车\空格等

服务器证书 certificate.crt

ca证书 ca_bundle.crt

根证书:从服务器下载的那个中间证书(我使用的中间证书,也能成功访问)

3 Nginx配置文件中,指向这个新的crt文件

<think> 我们参考之前的引用内容,整理Nginx配置SSL证书的详细步骤。根据引用[1]-[5],配置步骤大致如下: 1. 准备SSL证书文件(通常包括.crt或.pem证书文件和.key私钥文件) 2. 将证书文件上传到服务器指定目录(如Nginx安装目录下的cert目录) 3. 修改Nginx配置文件(通常为nginx.conf),在需要启用HTTPS的server块中配置SSL相关参数 4. 测试配置文件并重启Nginx 下面我们详细说明每一步: ### 📌 一、准备工作 1. **获取SSL证书**: - 可以从证书颁发机构(CA)购买,或使用Let's Encrypt等免费证书。 - 证书通常包括两个文件:证书文件(例如:`your_domain.crt` 或 `your_domain.pem`)和私钥文件(例如:`your_domain.key`)。 2. **上传证书文件**: - 将证书文件和私钥文件上传到服务器的某个目录,推荐放在Nginx的安装目录下的`conf/cert`目录(如果没有则创建): ```bash # 创建cert目录 sudo mkdir -p /usr/local/nginx/conf/cert ``` - 将证书文件(例如:`your_domain.crt`)和私钥文件(`your_domain.key`)上传至该目录。 ### ⚙️ 二、配置Nginx 1. **打开Nginx配置文件**: - 通常位于`/usr/local/nginx/conf/nginx.conf`(源码安装)或`/etc/nginx/nginx.conf`(包安装)。 - 使用文本编辑器(如vim)打开: ```bash sudo vim /usr/local/nginx/conf/nginx.conf ``` 2. **配置HTTPS server块**: - 在配置文件中,找到或添加一个`server`块,监听443端口,并配置SSL参数。参考引用[2][3][4][5]: ```nginx server { # 监听443端口并启用SSL listen 443 ssl; server_name your_domain.com; # 替换为你的域名 # 指定证书和私钥文件的路径 ssl_certificate cert/your_domain.crt; # 相对路径相对于Nginx配置文件目录,或使用绝对路径 ssl_certificate_key cert/your_domain.key; # 优化SSL配置 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; # 推荐使用TLS1.2及以上 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; # 其他配置(如根目录、代理等) location / { root html; index index.html index.htm; } } ``` - 注意: - `ssl_certificate`和`ssl_certificate_key`指向的文件路径必须是正确的。如果使用相对路径,则是相对于Nginx配置文件所在的目录。 - `server_name`必须与证书的域名一致。 3. **(可选)HTTP重定向到HTTPS**: - 为了让用户访问HTTP(80端口)自动跳转到HTTPS,可以添加以下server块: ```nginx server { listen 80; server_name your_domain.com; return 301 https://$host$request_uri; # 永久重定向 } ``` ### ✅ 三、测试与重启 1. **测试配置文件**: - 在重启之前,务必检查配置文件的语法是否正确: ```bash sudo nginx -t ``` - 如果显示`syntax is ok`和`test is successful`,则说明配置正确。 2. **重启Nginx服务**: - 使用以下命令重启Nginx以使配置生效: ```bash sudo nginx -s reload # 平滑重启,不中断服务 ``` 或 ```bash sudo systemctl restart nginx # 如果使用systemd管理 ``` ### 🔍 四、验证HTTPS - 在浏览器中访问 `https://your_domain.com`,查看浏览器地址栏是否有锁形图标,表示连接安全。 - 也可以使用在线工具如 [SSL Labs SSL Test](https://www.ssllabs.com/ssltest/) 检测SSL配置安全性。 ### 📚 引用说明 以上步骤参考了引用[1]-[5]中关于Nginx配置SSL证书的方法,特别是证书路径配置SSL参数优化等关键点[^1][^2][^3][^4][^5]。 --- §§ 相关问题 §§ 1. 如何申请免费的Let's Encrypt SSL证书? 2. Nginx如何配置多域名SSL证书? 3. 如何配置HTTP/2以提升HTTPS性能? 4. SSL证书失效后如何自动续期? </think> ### 🔒 Nginx 配置 SSL 证书详细指南 以下步骤基于主流证书类型(PEM/CRT)整理,结合安全最佳实践和引用内容,配置过程约需 10 分钟: --- #### 📋 **一、准备工作** 1. **证书文件准备** - 从证书机构(如 Let's Encrypt)获取证书文件: - **证书文件**:`your_domain.crt` 或 `your_domain.pem` - **私钥文件**:`your_domain.key` - 上传至服务器(推荐目录): ```bash sudo mkdir -p /usr/local/nginx/cert # 创建证书目录 sudo cp your_domain.* /usr/local/nginx/cert/ # 上传文件 ``` 2. **备份配置文件** ```bash sudo cp /usr/local/nginx/conf/nginx.conf nginx.conf.bak # 备份原配置 ``` --- #### ️ **二、修改 Nginx 配置** 编辑配置文件(通常位于 `/usr/local/nginx/conf/nginx.conf`): ```nginx server { listen 443 ssl http2; # 启用 SSL 和 HTTP/2 server_name your_domain.com; # 替换为你的域名 # SSL 证书路径(绝对路径更安全) ssl_certificate /usr/local/nginx/cert/your_domain.pem; ssl_certificate_key /usr/local/nginx/cert/your_domain.key; # 优化 SSL 协议配置(禁用不安全版本) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; # 会话缓存优化 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; # 禁用 Tickets 防重放攻击 # 安全头设置(HSTS 等) add_header Strict-Transport-Security "max-age=63072000" always; location / { root html; index index.html index.htm; } } # HTTP 强制跳转 HTTPS(可选但推荐) server { listen 80; server_name your_domain.com; return 301 https://$host$request_uri; # 301 永久重定向 } ``` > 📌 **关键参数说明**: > - `ssl_certificate`:证书链文件(PEM格式)[^1][^3][^4] > - `ssl_ciphers`:禁用弱加密算法(如 MD5/RC4)[^3][^4] > - `HSTS 头`:强制浏览器使用 HTTPS 连接[^1] --- #### ✅ **三、验证与生效** 1. **测试配置语法** ```bash sudo nginx -t # 出现 "syntax is ok" 即有效 ``` 2. **重启 Nginx 服务** ```bash sudo nginx -s reload # 平滑重启(不停机) ``` 3. **验证证书状态** ```bash echo | openssl s_client -connect your_domain.com:443 | openssl x509 -noout -dates # 输出证书有效期即成功 ``` --- #### 🔍 **四、高级安全加固** ```nginx # 在 SSL 配置块中添加: ssl_dhparam /usr/local/nginx/cert/dhparam.pem; # 增强前向保密性 ssl_ecdh_curve secp384r1; # 使用更强的椭圆曲线 ssl_stapling on; # OCSP 装订加速验证 ``` 生成 DH 参数文件: ```bash sudo openssl dhparam -out /usr/local/nginx/cert/dhparam.pem 2048 ``` --- ### 📚 **常见问题排查** | **问题现象** | **解决方案** | |-------------------------|---------------------------------------| | `SSL_CTX_use_certificate` 错误 | 检查证书路径和权限(需 600 权限)[^5] | | 浏览器提示 "证书不受信任" | 确保证书链完整(包含中间证书)[^1] | | TLS 协议不支持 | 检查 `ssl_protocols` 是否含 TLSv1.2+ | > 💡 通过 [SSL Labs 测试](https://www.ssllabs.com/ssltest/) 可全面评估配置安全等级。 --- ### 🌐 相关问题 1. 如何免费获取 Let's Encrypt SSL 证书并自动续期? 2. Nginx 如何同时支持 HTTP/2 和 SSL 加速? 3. 多域名场景下如何配置 SAN 或通配符证书? 4. 如何通过 Nginx 实现 SSL 双向认证(mTLS)? > 配置参考:证书路径声明[^2][^4]、加密套件选择[^3][^5]、会话优化[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值