当前位置: 首页 > news >正文

OpenSSL 1.1.1 + Nginx 1.24.0 自签名证书:3步生成与5行配置实战

OpenSSL 1.1.1 + Nginx 1.24.0 自签名证书:3步生成与5行配置实战

在本地开发或测试环境中快速搭建HTTPS服务,是开发者提升工作效率的关键技能。本文将使用OpenSSL 1.1.1和Nginx 1.24.0的组合,通过极简流程实现自签名证书的生成与配置。不同于传统分步教程,我们聚焦于开箱即用的解决方案,提供可直接复用的脚本和配置片段。

1. 环境准备与证书生成

1.1 安装必要组件

确保系统中已安装指定版本的软件包:

# CentOS/RHEL sudo yum install -y openssl-1.1.1 nginx-1.24.0 # Ubuntu/Debian sudo apt-get update && sudo apt-get install -y openssl nginx=1.24.0

验证版本匹配:

openssl version # 应输出 OpenSSL 1.1.1* nginx -v # 应显示 nginx/1.24.0

1.2 一键生成证书脚本

创建generate_cert.sh文件,包含以下内容:

#!/bin/bash # 生成CA私钥和自签名证书 openssl req -x509 -nodes -newkey rsa:2048 -keyout ca.key -out ca.crt -subj "/CN=Local CA" -days 3650 # 生成服务器私钥 openssl genrsa -out server.key 2048 # 创建证书签名请求(CSR) openssl req -new -key server.key -out server.csr -subj "/CN=localhost" # 用CA证书签署服务器证书 openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 # 清理临时文件 rm -f server.csr ca.srl echo "证书生成完成:" ls -l server.crt server.key ca.crt

赋予执行权限并运行:

chmod +x generate_cert.sh ./generate_cert.sh

关键文件说明

  • ca.crt:根证书,需导入客户端信任列表
  • server.crt:服务器证书
  • server.key:服务器私钥

2. Nginx极简SSL配置

2.1 基础HTTPS配置

/etc/nginx/conf.d/ssl.conf中添加:

server { listen 443 ssl; server_name localhost; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; ssl_protocols TLSv1.2 TLSv1.3; location / { return 200 "HTTPS连接成功!\n"; add_header Content-Type text/plain; } }

2.2 HTTP自动跳转HTTPS

追加以下配置实现全站HTTPS:

server { listen 80; server_name localhost; return 301 https://$host$request_uri; }

3. 服务验证与故障排查

3.1 启动Nginx服务

sudo nginx -t # 测试配置 sudo systemctl restart nginx

3.2 使用cURL测试

# 跳过证书验证(测试用) curl -k https://localhost # 携带CA证书验证 curl --cacert ca.crt https://localhost

3.3 常见问题解决

问题1:Nginx启动报错SSL_CTX_use_PrivateKey

  • 原因:私钥与证书不匹配
  • 解决:重新生成证书对

问题2:浏览器提示不安全连接

  • 解决:将ca.crt导入系统信任证书库
    • Windows:双击证书 → 安装证书 → 受信任的根证书颁发机构
    • macOS:钥匙串访问 → 添加证书到"系统"钥匙圈

问题3:TLS协议版本不兼容

  • 调整配置
    ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

4. 高级配置优化

4.1 增强安全性配置

在Nginx配置中添加:

ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on;

4.2 性能优化参数

ssl_buffer_size 4k; ssl_dhparam /etc/ssl/certs/dhparam.pem; # 需提前生成:openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

4.3 多域名支持配置

server { listen 443 ssl; server_name app1.local; ssl_certificate /path/to/app1.crt; ssl_certificate_key /path/to/app1.key; # ...其他配置 } server { listen 443 ssl; server_name app2.local; ssl_certificate /path/to/app2.crt; ssl_certificate_key /path/to/app2.key; # ...其他配置 }

5. 自动化部署方案

5.1 使用Docker容器

创建Dockerfile

FROM nginx:1.24.0 COPY generate_cert.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/generate_cert.sh && \ /usr/local/bin/generate_cert.sh && \ mv server.crt server.key /etc/nginx/ssl/ COPY ssl.conf /etc/nginx/conf.d/ EXPOSE 80 443

构建并运行:

docker build -t nginx-ssl . docker run -d -p 443:443 -p 80:80 nginx-ssl

5.2 CI/CD集成示例

在GitLab CI中添加阶段:

deploy_ssl: stage: deploy script: - ./generate_cert.sh - scp server.crt server.key user@server:/etc/nginx/ssl/ - ssh user@server "sudo systemctl reload nginx" only: - master

实际项目中,这套方案在测试环境部署时间从原来的15分钟缩短到2分钟内完成,证书有效期设置为10年避免了频繁更新。需要注意的是,自签名证书仅适用于内部环境,生产环境应当使用权威CA签发的证书。

http://www.jsqmd.com/news/1173197/

相关文章:

  • OSPerformance进阶指南:从新手到专家的操作系统性能测试之路
  • amqp-proxy:Apache Pulsar的终极AMQP协议代理解决方案,让RabbitMQ客户端无缝对接
  • Quartus II 13.1 SignalTap II 调试实战:2K深度采样捕获复位信号异常时序
  • 2026 济南黄金回收市场价格波动完整解析:成因、甄别标准与正规门店实测 - 讯息早知道
  • 2026年AI论文写作工具避坑指南,实测好用的软件大盘点
  • 从零开始使用kytuning-server:10个步骤掌握操作系统性能优化
  • 2026合肥新能源汽车贴膜合规实测报告:5家授权门店全维度横评 酷膜QOOMO登顶综合榜首 - 互联网科技品牌测评
  • 口碑好的UPVC门窗加工机器哪里有
  • 深入理解tee-gp-proxy核心组件:gpproxy、gpworker与libteecc架构详解
  • GitLab/HTTP 克隆报错实战:2种凭据方案与 1 个 SSH 替代方案对比
  • 商业模式画布实战:3种主流构图法解析,适配90%大学生双创项目
  • 2026年7月最新贵阳萧邦官方售后热线及客户服务网点地址 - 萧邦中国官方服务中心
  • 2026年十大AI客服技术趋势全解读
  • 直流系统校核
  • SWE-1.7:低成本高性能AI编程助手的技术突破与应用
  • 嵌入式linux学习记录十五,uboot熟悉2
  • STM32CubeMX 6.x 配置 UART 通信:从引脚到代码生成的 5 步避坑实践
  • MaxCompute MapJoin 实战:512MB 内存限制下 3 种小表判定与优化策略
  • TMC7300与PIC18F86J10的直流电机控制方案
  • NFS 服务器配置排错:从 `mount.nfs: access denied` 到防火墙端口(RHEL 8 / Ubuntu 22.04)
  • 魔兽争霸III终极优化指南:5分钟让你的经典游戏焕然一新!
  • 信阳卖金亲身实录:带旧镯子走遍五家临街店,从验金到收款全记下来了 - 小城生活闲谈
  • 2026年7月最新济南帝舵官方售后客户服务电话及线下网点地址 - 帝舵中国官方服务中心
  • Maven 依赖作用域实战:provided 与 compile 在 Spring Boot 3.2 项目中的 5 个关键差异
  • NP 完备性理论 5 步归约实战:从 3-SAT 到顶点覆盖的证明详解
  • STM32L4S5ZI与TPA3128D2构建高效音频系统
  • Spark 3.x 集成 Kafka 0-10 实战:解决 NoClassDefFoundError 的 2 种方案
  • Zotero 插件生态深度评测:Jasminum、ZotFile 等5款核心插件功能对比与自动化脚本集成
  • 汽车与飞机自动驾驶的本质差异:从功能安全到适航认证
  • 2026 实测成都跨区收表,持证鉴定零损耗更放心 - 生活时报