Nginx自签名证书的实现

 更新时间:2026年08月02日 10:48:57   作者:難釋懷  
本文手把手教你用OpenSSL生成自签名证书,并配置到Nginx中,轻松启用HTTPS,同时分享如何在不同操作系统上信任证书,彻底消除浏览器不安全警告

一、引言:为什么需要自签名证书?

在日常开发和测试中,我们经常会遇到这些场景:

  • 本地开发:正在开发一个新功能,但某些浏览器 API(如 Geolocation、Service Worker)强制要求 HTTPS 环境。
  • 内网部署:在公司内部网络部署了一个管理后台或 API 服务,不需要公网访问,但希望有基本的加密。
  • 安全测试:需要模拟一个 HTTPS 环境来测试应用的安全策略。

向 CA(证书颁发机构)申请正式证书?大可不必!对于这些非生产、非公网的场景,自签名证书是完美的解决方案。它能让你快速启用 HTTPS,绕过浏览器的“不安全”警告(需手动信任),极大地提升开发和测试效率。

💡 核心价值:
掌握 Nginx 自签名证书配置,是高效进行本地开发和内网测试的必备技能!

二、准备工作:安装 OpenSSL

自签名证书的生成依赖于 OpenSSL 工具包。大多数 Linux 发行版默认已安装,如果没有,请先安装:

# Ubuntu/Debian
sudo apt update && sudo apt install -y openssl

# CentOS/RHEL/Rocky Linux
sudo yum install -y openssl

你可以通过 openssl version 命令来验证是否安装成功。

三、实战:生成自签名证书

我们将创建一个有效期为 365 天的自签名证书。

步骤 1:创建证书存储目录(可选但推荐)

为了便于管理,我们创建一个专门的目录来存放证书文件。

sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl

步骤 2:使用 OpenSSL 一键生成证书和私钥

执行以下命令,它会同时生成私钥(.key)和证书(.crt)文件。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/nginx/ssl/nginx-selfsigned.key \
    -out /etc/nginx/ssl/nginx-selfsigned.crt

命令参数详解

  • -x509: 创建一个自签名的证书,而不是证书签名请求(CSR)。
  • -nodes: 不对私钥进行加密(no DES)。如果加密了,每次 Nginx 启动都需要输入密码,不适合自动化。
  • -days 365: 证书的有效期为 365 天。
  • -newkey rsa:2048: 生成一个新的 2048 位 RSA 私钥。
  • -keyout: 指定私钥文件的输出路径。
  • -out: 指定证书文件的输出路径。

步骤 3:填写证书信息

执行命令后,OpenSSL 会提示你输入一些信息。这些信息会被嵌入到证书中。

Country Name (2 letter code) [XX]:CN          # 国家代码,中国填 CN
State or Province Name (full name) []:Beijing # 省/州
Locality Name (eg, city) [Default City]:Beijing # 城市
Organization Name (eg, company) [Default Company Ltd]:MyCompany # 组织/公司名
Organizational Unit Name (eg, section) []:IT Dept # 部门
Common Name (eg, your name or your server's hostname) []:localhost # 最重要!通常是你的域名或服务器IP
Email Address []:admin@mycompany.com # 邮箱(可选)

关键点:Common Name (CN) 字段非常重要。如果你是通过 https://localhost 访问,这里就填 localhost。如果是通过 IP https://192.168.1.100 访问,则填 192.168.1.100。否则浏览器会报“域名不匹配”的错误。

四、配置 Nginx 启用 HTTPS

现在,我们有了证书文件,接下来就是让 Nginx 使用它们。

修改 Nginx 配置文件

编辑你的站点配置文件(例如 /etc/nginx/sites-available/default 或 /etc/nginx/conf.d/your-site.conf):

server {
    # 监听标准的 HTTPS 端口,并启用 SSL 和 HTTP/2
    listen 443 ssl http2;
    server_name localhost; # 这里要和证书的 Common Name 一致
 
    # 指定证书和私钥的路径
    ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;
 
    # (可选)基础安全加固
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
 
    # 网站根目录
    root /var/www/html;
    index index.html index.htm;
 
    location / {
        try_files $uri $uri/ =404;
    }
}
 
# (最佳实践)将 HTTP 请求重定向到 HTTPS
server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

重载 Nginx 配置

保存文件后,检查配置语法并重载 Nginx:

# 检查配置文件语法
sudo nginx -t

# 如果语法正确,重载配置
sudo systemctl reload nginx

五、信任你的自签名证书(消除浏览器警告)

当你第一次访问 https://localhost 时,浏览器会显示一个醒目的“您的连接不是私密连接”或“此网站的安全证书存在问题”的警告。这是因为你的证书不是由受信任的 CA 签发的。

解决方法:手动将你的自签名证书添加到操作系统的“受信任的根证书颁发机构”中。

在 Windows 上

  1. 将 nginx-selfsigned.crt 文件复制到你的 Windows 机器上。
  2. 双击该文件 -> “安装证书” -> “本地计算机” -> “将所有证书放入下列存储” -> “受信任的根证书颁发机构” -> 完成。

在 macOS 上

  1. 将 .crt 文件拖入“钥匙串访问”应用。
  2. 在“系统”钥匙串中找到该证书,双击打开。
  3. 展开“信任”部分,将“使用此证书时”设置为“始终信任”。

在 Linux (Ubuntu) 上

# 复制证书到系统目录
sudo cp /etc/nginx/ssl/nginx-selfsigned.crt /usr/local/share/ca-certificates/
# 更新证书库
sudo update-ca-certificates

完成信任操作后,刷新浏览器页面,那个烦人的警告就会消失,地址栏会出现灰色的锁图标,表示连接已加密。

六、结语

到此这篇关于Nginx自签名证书的实现的文章就介绍到这了,更多相关Nginx自签名证书内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Nginx实现负载均衡的策略

    使用Nginx实现负载均衡的策略

    本篇文章主要介绍了使用Nginx实现负载均衡的策略,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Nginx访问日志及错误日志参数说明

    Nginx访问日志及错误日志参数说明

    这篇文章主要介绍了Nginx访问日志及错误日志参数说明,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Nginx图片防盗链配置实例

    Nginx图片防盗链配置实例

    这篇文章主要介绍了Nginx图片防盗链配置实例,并对代码做了详细的说明,让你充分理解配置的意图,需要的朋友可以参考下
    2014-07-07
  • 前后台Nginx部署同域名路径区分配置

    前后台Nginx部署同域名路径区分配置

    前后台共用一个域名部署时,通过不同路径区分静态文件和API接口,适配VueRouter的历史模式,保证页面刷新和路由跳转正常,配置Nginx时注意路径匹配顺序,前端配置路径必须与Nginx配置一致,proxy_pass后缀不能删,前后端路径要对齐
    2026-04-04
  • 查看nginx是否已经启动的实现方式

    查看nginx是否已经启动的实现方式

    本文介绍了在Ubuntu或其他Linux系统上检查Nginx是否启动的四种方法:使用systemctl命令、ps命令、检查端口和访问默认页面,每种方法都给出了具体操作步骤和注意事项
    2026-04-04
  • nginx配置反向代理时遇到的路径问题

    nginx配置反向代理时遇到的路径问题

    这篇文章主要介绍了nginx配置反向代理时遇到的路径问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Linux 系统 nginx 服务器安装及负载均衡配置详解

    Linux 系统 nginx 服务器安装及负载均衡配置详解

    nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器、邮件代理服务器以及通用的 TCP/UDP 代理服务器。这篇文章主要介绍了Linux 系统 nginx 服务器安装及负载均衡配置详解,需要的朋友可以参考下
    2019-07-07
  • 加速nginx性能: 开启gzip和缓存

    加速nginx性能: 开启gzip和缓存

    nginx 是一个高性能的 Web 服务器,之前也写过一些关于 nginx 的文章。为了提高博客的响应速度,可以从设置 nginx 的 gzip 和缓存这2方面入手。为字体开启 gzip 和缓存能大大减少带宽的消耗
    2017-03-03
  • centos7下基于nginx+uwsgi部署Django项目的实现

    centos7下基于nginx+uwsgi部署Django项目的实现

    Django是一个开源的Web应用框架,使用Python语言编写,主要用于搭建Web项目,本教程介绍如何在centos7下基于nginx+uwsgi部署Django项目的实现,感兴趣的可以了解一下
    2024-04-04
  • Nginx中mime.types配置文件类型响应的实现步骤

    Nginx中mime.types配置文件类型响应的实现步骤

    本文主要介绍了Nginx中mime.types配置文件类型响应的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03

最新评论