nginx修改https协议+生成.pem公钥和.key私钥

server {
    # 1. 核心修改:将普通listen改为HTTPS监听(443是HTTPS默认端口,也可保留12355并添加ssl标识)
    # 两种写法可选:
    # 写法1:使用HTTPS默认端口443(推荐,浏览器可直接通过https://域名访问,无需输入端口)
    listen 443 ssl;
    # 写法2:保留原12355端口,开启HTTPS(访问时需输入https://localhost:12355)
    # listen 8089 ssl;
    
    # 2. 新增必备配置:指定SSL证书文件路径(核心,HTTPS依赖证书验证)
    # 替换为你的SSL证书公钥文件实际路径(.pem或.crt格式)
    ssl_certificate /path/to/your/ssl-certificate.pem;
    # 替换为你的SSL证书私钥文件实际路径(.key格式,需妥善保管,不可公开)
    ssl_certificate_key /path/to/your/ssl-private-key.key;
    

  

关键说明(必看)

  1. listen 指令修改核心:
    普通 HTTP 监听仅需指定端口(如listen 8089;),而 HTTPS 监听必须添加 ssl 标识(格式:listen 端口 ssl;),告知 Nginx 该端口启用 SSL/TLS 协议。
  2. SSL 证书文件要求(缺一不可):
    • ssl_certificate:指定公钥文件路径,常见格式为.pem.crt,是公开可对外的证书文件。
    • ssl_certificate_key:指定私钥文件路径,常见格式为.key,是私密文件,需保证 Nginx 进程有读取权限,且不可泄露给第三方。
    • 证书来源:
      • 生产环境:从正规 CA 机构(如 Let's Encrypt(免费)、阿里云、腾讯云等)申请。
      • 测试 / 本地环境:可通过openssl工具自签名证书(仅用于测试,浏览器会提示不安全)。
     
  3. 可选优化配置的作用:
    配置ssl_protocolsssl_ciphers等参数,是为了禁用不安全的协议和加密套件,避免被黑客利用漏洞攻击,同时提升 HTTPS 连接的性能和兼容性。

配置生效步骤

  1. 保存修改后的 Nginx 配置文件。
  2. 检查配置语法是否正确:nginx -t(若配置错误,会提示具体错误位置)。
  3. 重新加载 Nginx 配置(不中断服务):nginx -s reload
  4. 若 Nginx 未启动,直接启动:nginx

五、验证是否生效

访问地址(根据你的配置选择):
  • 若使用 443 端口:https://localhost(或https://你的域名
  • 若保留 8089 端口:https://localhost:8089
若浏览器能正常加载页面,且地址栏显示 “小锁” 图标(测试证书会显示黄色感叹号,属正常现象),说明 HTTPS 配置生效。

总结

  1. HTTPS 监听的核心是listen 端口 ssl;指令,必须添加ssl标识。
  2. 配置ssl_certificatessl_certificate_key指定证书和私钥路径是 HTTPS 生效的前提。
  3. 推荐添加 HTTP 跳转 HTTPS 的配置,提升用户访问体验。
  4. 配置修改后需通过nginx -t校验语法,再用nginx -s reload生效。

 

 

生成.pem公钥和.key私钥

你需要生成用于测试的 HTTPS 自签名证书(包含.pem公钥和.key私钥),最常用且便捷的工具是openssl,下面我会详细介绍完整的生成步骤、操作说明和后续使用注意事项。

 

一、前提条件

 

确保你的系统已安装openssl工具:

 

  • Linux/macOS:绝大多数系统默认自带,可直接在终端输入 openssl version 验证(显示版本信息即表示已安装)。
  • Windows:需手动安装 OpenSSL(可从OpenSSL 官网(https://www.openssl.org/)下载,或通过 Git Bash、WSL 环境使用,推荐 WSL 更便捷)。

 

二、核心命令(一步生成 key 和 pem)

 

直接在终端执行以下命令,即可一次性生成私钥文件(.key)和自签名公钥证书文件(.pem),无需额外步骤:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/abc/nginx/ssl/nginx_test.key -out /home/abc/nginx/ssl/nginx_test.pem

  

三、命令参数详细解释(理解每个选项的作用)

 
参数含义说明
req OpenSSL 的核心子命令,用于处理证书请求(生成、验证等),这里用于生成自签名证书
-x509 指定生成自签名证书(而非证书请求文件 CSR),x509 是 SSL/TLS 证书遵循的标准格式
-nodes 表示不对生成的私钥文件进行加密(省略该参数会要求设置私钥密码,Nginx 使用时每次重启都要输入密码,测试环境无需加密),nodes = no DES(不使用 DES 加密算法)
-days 365 指定证书的有效期限为 365 天(可自定义,如3650表示 10 年),过期后需重新生成
-newkey rsa:2048 同时生成新的私钥和证书请求,采用 RSA 加密算法,密钥长度 2048 位(安全性足够,也可设置为 4096 位,加密强度更高但性能略有损耗)
-keyout nginx_test.key 指定生成的私钥文件的名称和路径(这里生成当前目录下的nginx_test.key,可自定义路径如/home/szzc/ssl/nginx_test.key
-out nginx_test.pem 指定生成的自签名公钥证书文件的名称和路径(这里生成当前目录下的nginx_test.pem,可自定义路径如/home/szzc/ssl/nginx_test.pem
 

四、执行命令后的交互配置(按需填写,测试环境可简化)

 
执行上述命令后,终端会提示你填写一系列证书相关信息,测试环境下无需严格填写,大部分字段可直接回车跳过,仅需注意 2 个关键项:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN  # 可选,填写国家代码,如中国填CN
State or Province Name (full name) [Some-State]:Beijing  # 可选,填写省份/州
Locality Name (eg, city) []:Beijing  # 可选,填写城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Test  # 可选,填写组织/公司名称
Organizational Unit Name (eg, section) []:Test  # 可选,填写部门名称
Common Name (e.g. server FQDN or YOUR name) []:localhost  # 关键!填写域名/主机名,测试环境填localhost(或你的服务器IP)
Email Address []:test@localhost.com  # 可选,填写邮箱地址

  

关键注意点:

Common Name(通用名称)是浏览器验证证书的核心字段,必须与你后续访问 Nginx 的地址一致:
  • 若后续访问https://localhost:8089,则填localhost
  • 若后续访问https://192.168.1.100:8089(服务器内网 IP),则填该 IP 地址;
  • 若填错,浏览器访问时会提示 “证书与站点不匹配” 的安全错误。

五、生成结果验证

执行完成后,在当前终端所在目录(或你指定的自定义路径),会出现两个文件:
  1. nginx_test.key:私钥文件(私密,不可泄露,需保证 Nginx 进程有读取权限);
  2. nginx_test.pem:自签名公钥证书文件(可公开,用于 Nginx 配置)。
可通过ls命令(Linux/macOS)或dir命令(Windows)查看文件是否存在。

六、后续对接 Nginx 配置(关键衔接)

  1. 将生成的nginx_test.keynginx_test.pem移动到安全的目录(推荐专门创建 SSL 目录,如/home/abc/ssl/):
mkdir -p /home/abc/ssl
mv nginx_test.key nginx_test.pem /home/abc/ssl/

  2.给文件设置合理权限(Nginx 进程需读取,避免过宽权限泄露私钥):

chmod 644 /home/abc/ssl/nginx_test.pem  # 公钥可公开读取
chmod 600 /home/abc/ssl/nginx_test.key   # 私钥仅所有者可读写

  3.修改 Nginx 配置中的证书路径,对应到生成的文件:

ssl_certificate /home/abc/ssl/nginx_test.pem;
ssl_certificate_key /home/abc/ssl/nginx_test.key;

  

注意事项(测试环境专属)

  1. 自签名证书仅用于本地测试 / 开发环境,生产环境必须使用正规 CA 机构(如 Let's Encrypt、阿里云、腾讯云)颁发的证书,否则浏览器会提示 “连接不安全”,且无法通过公网环境的安全校验。
  2. 访问时浏览器出现安全警告(如 Chrome 显示 “您的连接不是私密连接”)是正常现象,可选择 “高级”->“继续访问”(不同浏览器操作略有差异),即可进入页面。
  3. 若证书过期,直接重新执行本文的核心命令,生成新的证书替换原有文件即可。

总结

  1. 测试用 SSL 证书核心命令:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 私钥.key -out 证书.pem
  2. 关键参数-x509(自签名)、-nodes(私钥不加密)、-newkey rsa:2048(生成 RSA 密钥)缺一不可。
  3. Common Name需与访问地址一致,证书生成后需配置正确的 Nginx 路径和文件权限。
  4. 自签名证书仅用于测试,生产环境需使用正规 CA 证书。
 
 

 

posted @ 2026-01-19 14:17  show-code  阅读(4)  评论(0)    收藏  举报