自签SSL实现https

news/2025/2/24 16:39:19

首先下载安装openssl,网址如下:

https>https://slproweb.com/products/Win32OpenSSL.html

自签名证书生成及 Nginx HTTPS 配置教程

本教程将指导你如何生成自签名证书,并在 Nginx 中配置 HTTPS 服务。以下是详细步骤:


1. 生成加密的私钥文件
openssl genrsa -des3 -out C:\Users\10960\Desktop\nginx\server.key 2048
  • 作用:生成一个 2048 位的 RSA 私钥,并使用 3DES 算法加密保护。
  • 参数说明
    • -des3:使用 3DES 算法加密私钥文件(生成时需要输入密码)。
    • -out:指定私钥文件保存路径。
  • 注意:私钥密码需要牢记!后续操作会用到。

2. 创建证书签名请求(CSR)
openssl req -new -key C:\Users\10960\Desktop\nginx\server.key -out C:\Users\10960\Desktop\nginx\server.csr -subj "/C=CN/ST=B/L=B/O=B/OU=B/CN=192.168.1.126"
  • 作用:生成一个证书签名请求文件(CSR),用于申请证书。
  • 参数说明
    • -subj:指定证书主题信息:
      • /C=CN:国家(中国)
      • /ST=B:省份(示例值,可替换如Beijing
      • /L=B:城市(示例值,可替换如Beijing
      • /O=B:组织名称(示例值,可替换如MyCompany
      • /OU=B:组织单位(示例值,可替换如IT
      • /CN=192.168.1.126:通用名称(必须与访问域名/IP一致
  • 注意CN 必须填写实际访问的域名或 IP,否则浏览器会报证书名称不匹配。

3. 生成自签名证书
openssl x509 -req -days 30 -in C:\Users\10960\Desktop\nginx\server.csr -signkey C:\Users\10960\Desktop\nginx\server.key -out C:\Users\10960\Desktop\nginx\server.crt
  • 作用:使用私钥直接签署证书(自签名),有效期 30 天。
  • 参数说明
    • -days 30:证书有效期 30 天。
    • -signkey:指定签名用的私钥。

4. 导出无密码的私钥(供 Nginx 使用)
openssl rsa -in C:\Users\10960\Desktop\nginx\server.key -out C:\Users\10960\Desktop\nginx\server.key.unsecure
  • 作用:生成一个无密码的私钥文件,避免 Nginx 启动时要求输入密码。
  • 注意
    • 执行时会要求输入原始私钥的密码。
    • 生产环境中需严格控制无密码私钥的权限!

5. 配置 Nginx HTTPS 服务
server {
    listen 80;
    listen 443 ssl;
    server_name localhost;

    # 强制 HTTP 跳转到 HTTPS(可选)
    if ($scheme = http) {
        return 301 https>https://$host$request_uri;
    }

    # SSL 配置
    ssl_certificate cert/server.crt; # 指定证书的绝对路径
    ssl_certificate_key cert/server.key.unsecure; # 指定私钥的绝对路径
    
    # 其他配置(如根目录、日志等)
    charset utf-8;
    location / {
        root   html;
        index  index.html index.htm;
    }
}
  • 关键配置
    • ssl_certificate:证书文件路径(使用绝对路径)。
    • ssl_certificate_key:无密码私钥文件路径。
  • 路径注意
    • Windows 路径需用正斜杠 / 或双反斜杠 \\
    • 建议将证书和私钥文件移动到 Nginx 的 conf/cert/ 目录,并使用相对路径:
ssl_certificate      cert/server.crt;
ssl_certificate_key  cert/server.key.unsecure;

6. 验证并重启 Nginx
# 检查配置文件语法
nginx -t

# 重启 Nginx
nginx -s reload

7. 访问测试
  • 浏览器访问 https>https://192.168.1.126
  • 预期结果
    • 出现安全警告(自签名证书不被信任)。
    • 手动忽略警告后可继续访问。

8. 解决浏览器警告(可选)

自签名证书会触发浏览器警告。如需消除警告,需:

  1. 将证书导入系统信任库(仅限内部测试环境):
    • server.crt 文件导入操作系统的“受信任的根证书颁发机构”。
  1. 使用受信任的证书
    • 正式环境中建议申请免费证书(如 Let's Encrypt)或购买商业证书。

完整操作流程图

生成私钥 (server.key) → 创建 CSR (server.csr) → 自签名证书 (server.crt)
       ↓
导出无密码私钥 (server.key.unsecure) → 配置 Nginx → 重启生效

常见问题

  1. Nginx 启动报错 SSL_CTX_use_PrivateKey_file failed
    • 原因:私钥文件路径错误或权限不足。
    • 解决:检查路径,并确保 Nginx 进程有读取权限。
  1. 浏览器提示 NET::ERR_CERT_COMMON_NAME_INVALID
    • 原因:证书的 CN 与访问地址不匹配。
    • 解决:重新生成证书,确保 CN 是域名或 IP。
  1. 如何延长证书有效期?
    • 修改 -days 参数(如 -days 365)后重新生成证书。

总结

通过本教程,你已成功配置了一个基于自签名证书的 Nginx HTTPS 服务。适用于测试环境或内部系统,生产环境建议使用受信任的证书。


http://www.niftyadmin.cn/n/5864591.html

相关文章

go 语言中的线程池

使用 goroutine 和 channel Go 语言中并没有直接类似 Java 线程池的内建概念,但它提供了类似的功能,主要通过goroutine和channel来实现并发处理。你可以通过结合这两者来实现一个“线程池”的功能。 在 Go 中,goroutine是轻量级的线程&…

深度神经网络 机器学习 超参数自动优化 ,PyGAD和DEAP是两个常用的遗传算法库,它们各自有不同的特点和适用场景

在Python中,PyGAD和DEAP是两个常用的遗传算法库,它们各自有不同的特点和适用场景。以下是对PyGAD和DEAP的对比分析: 功能特点 PyGAD 易用性高:PyGAD提供了简化的API,适合初学者快速上手。 功能专一:专注于…

记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!

背景 为满足实验室横向项目需求,在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为:通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。 实现过程 调研 花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…

视频HDR技术详解,你的电脑怎么播放HDR视频?

闲聊:前两天在b站上面看到影视飓风的视频,让我有点疑惑,我不知道为什么播放视频有设备撑不住一说,所以感兴趣去ytb下载了4k原片30hz刷新的,然后测试一下我的电脑能不能播放,发现还是可以的,视觉…

Maven模块化管理:巧用packaging标签优化多模块项目

在复杂的Java项目中,合理使用Maven的packaging标签是模块化管理的核心技能。本文将通过实际案例,详解如何通过packaging类型的选择和组合,构建清晰、可维护的多模块架构。 一、Maven packaging基础 Maven的packaging标签定义了项目的最终输…

【uni-app】对齐胶囊容器组件

代码碎片 <template><div><view :style"{ height: ${statusBarHeight}px }"></view><viewclass"":style"{height: ${menuButtonHeight menuButtonPadding * 2}px,width: ${menuButtonInfo.left}px,}"><slot …

单机上使用docker搭建minio集群

单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose&#xff08;如果尚未安装&#xff09;1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…

UE5销毁Actor,移动Actor,简单的空气墙的制作

1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数&#xff0c;它会立即标记 Actor 为销毁状态&#xff0c;并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程&#xff0c;调用 Destroy() 后&#xff0c;Actor 立即进入销毁过程。具体…