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

📅 2026/7/12 9:30:36
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 nginx1.24.0验证版本匹配openssl version # 应输出 OpenSSL 1.1.1* nginx -v # 应显示 nginx/1.24.01.2 一键生成证书脚本创建generate_cert.sh文件包含以下内容#!/bin/bash # 生成CA私钥和自签名证书 openssl req -x509 -nodes -newkey rsa:2048 -keyout ca.key -out ca.crt -subj /CNLocal CA -days 3650 # 生成服务器私钥 openssl genrsa -out server.key 2048 # 创建证书签名请求(CSR) openssl req -new -key server.key -out server.csr -subj /CNlocalhost # 用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追加以下配置实现全站HTTPSserver { listen 80; server_name localhost; return 301 https://$host$request_uri; }3. 服务验证与故障排查3.1 启动Nginx服务sudo nginx -t # 测试配置 sudo systemctl restart nginx3.2 使用cURL测试# 跳过证书验证测试用 curl -k https://localhost # 携带CA证书验证 curl --cacert ca.crt https://localhost3.3 常见问题解决问题1Nginx启动报错SSL_CTX_use_PrivateKey原因私钥与证书不匹配解决重新生成证书对问题2浏览器提示不安全连接解决将ca.crt导入系统信任证书库Windows双击证书 → 安装证书 → 受信任的根证书颁发机构macOS钥匙串访问 → 添加证书到系统钥匙圈问题3TLS协议版本不兼容调整配置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 20484.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容器创建DockerfileFROM 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-ssl5.2 CI/CD集成示例在GitLab CI中添加阶段deploy_ssl: stage: deploy script: - ./generate_cert.sh - scp server.crt server.key userserver:/etc/nginx/ssl/ - ssh userserver sudo systemctl reload nginx only: - master实际项目中这套方案在测试环境部署时间从原来的15分钟缩短到2分钟内完成证书有效期设置为10年避免了频繁更新。需要注意的是自签名证书仅适用于内部环境生产环境应当使用权威CA签发的证书。