nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx自签名证书

Nginx自签名证书的实现

作者:難釋懷

本文手把手教你用OpenSSL生成自签名证书,并配置到Nginx中,轻松启用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

命令参数详解

步骤 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自签名证书内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文