欢迎光临
我们一直在努力

Linux 系统下 Nginx 自制 HTTPS 证书:从生成到配置的完整指南

在 Linux 环境的开发或测试场景中,为本地服务启用 HTTPS 是常见需求。相比申请正式证书,自签名 HTTPS 证书在 Linux 系统下生成更快、操作更便捷,能快速满足调试需求。本文将针对 Linux 系统(覆盖 Ubuntu/Debian、CentOS/RHEL 等主流发行版),手把手教你用 OpenSSL 生成证书、配置 Nginx,全程贴合 Linux 命令行操作习惯。

一、Linux 系统下自签名证书的适用场景

在 Linux 环境中,自签名证书尤其适合以下场景:

  • 本地开发调试(如在 Linux 服务器上部署的localhost服务)
  • 局域网内部测试服务(仅团队成员通过 Linux 服务器 IP 访问)
  • 临时演示环境(如 Linux 虚拟机中的测试站点)

需特别注意:Linux 系统下的自签名证书同样不支持生产环境—— 即使服务部署在 Linux 服务器上,对外公开服务时,浏览器仍会弹出 “不安全” 警告,影响用户信任。

二、Linux 系统准备:安装并验证 OpenSSL

Linux 绝大多数发行版会预装 OpenSSL,但不同版本的安装命令略有差异,以下是详细操作:

1. 检查 OpenSSL 是否已安装

打开 Linux 终端(快捷键通常为Ctrl+Alt+T,远程连接可通过 SSH 工具如 Xshell、FinalShell),执行命令:

openssl version

  • 若输出类似OpenSSL 1.1.1f 31 Mar 2020(Ubuntu 20.04)或OpenSSL 1.0.2k-fips 26 Jan 2017(CentOS 7),说明已安装;
  • 若提示 “command not found”,则需按发行版手动安装。

2. 按 Linux 发行版安装 OpenSSL

(1)Ubuntu/Debian 系列

使用apt包管理器安装,需确保权限足够(添加sudo):

# 更新软件源(避免安装旧版本)

sudo apt update

# 安装OpenSSL

sudo apt install openssl -y

(2)CentOS/RHEL 系列

CentOS 7 用yum,CentOS 8 及以上用dnf:

# CentOS 7

sudo yum install openssl -y

# CentOS 8/RHEL 8+

sudo dnf install openssl -y

(3)SUSE 系列

使用zypper安装:

sudo zypper install openssl -y

安装完成后,再次执行openssl version验证,确保输出版本信息。

三、Linux 终端生成自签名证书:3 步极简操作

在 Linux 系统中,生成证书全程通过终端命令完成,建议先创建单独的工作目录(如/tmp/ssl),避免文件混乱:

# 创建工作目录并进入

mkdir -p /tmp/ssl && cd /tmp/ssl

步骤 1:生成服务器私钥(Linux 权限重点!)

私钥是证书核心,在 Linux 系统中必须严格控制权限(仅所有者可读写,避免其他用户篡改或泄露)。执行命令:

# 生成2048位RSA私钥,保存为server.key

openssl genrsa -out server.key 2048

# 关键:设置私钥权限为600(所有者r/w,其他无权限)

chmod 600 server.key

  • 执行后,终端会输出私钥生成日志,/tmp/ssl目录下会出现server.key文件;
  • 可通过ls -l server.key查看权限,确保输出类似-rw——- 1 root root 1679 Nov 2 10:00 server.key(所有者为 root,权限 600)。

步骤 2:生成证书签名请求(CSR)

CSR 文件需填写服务器信息,在 Linux 终端中按提示输入即可,Common Name必须与后续访问的 Linux 服务器 IP / 域名一致(如本地调试填localhost,局域网服务填192.168.1.100):

openssl req -new -key server.key -out server.csr

终端会依次提示输入信息,示例如下(带*为必填):

Country Name (2 letter code) [AU]:CN # 国家代码,中国填CN

State or Province Name (full name) [Some-State]:Shanghai # Linux服务器所在省份

Locality Name (eg, city) []:Shanghai # 所在城市

Organization Name (eg, company) [Internet Widgits Pty Ltd]:LinuxDev # 组织/公司名

Organizational Unit Name (eg, section) []:Test # 部门名

Common Name (e.g. server FQDN or YOUR name) []:192.168.1.100 # 核心!Linux服务器IP/域名

Email Address []:dev@linux.com # 邮箱(可选)

A challenge password []: # 密码(可选,直接回车跳过)

An optional company name []: # 可选公司名(直接回车跳过)

填写完成后,/tmp/ssl目录会新增server.csr文件。

步骤 3:生成自签名证书(设置 Linux 下有效期)

用私钥对 CSR 签名,生成最终证书,并设置有效期(默认 365 天,可按需调整,如-days 730为 2 年):

# 生成有效期365天的自签名证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

  • 执行后,终端会提示 “Signature ok”,/tmp/ssl目录下会出现server.crt证书文件;
  • 可通过ls查看当前目录,确保存在server.key、server.csr、server.crt三个文件,至此证书生成完成。

四、Linux 系统 Nginx 配置:证书部署与服务启动

Linux 下 Nginx 的配置文件路径、服务管理命令有固定规范,以下按主流发行版详细说明:

步骤 1:Linux 下存放证书(规范路径)

Nginx 在 Linux 中的配置目录通常为/etc/nginx,建议将证书放到/etc/nginx/ssl目录(统一管理,避免误删):

# 创建Nginx证书目录(若不存在)

sudo mkdir -p /etc/nginx/ssl

# 复制证书文件到目标目录(需sudo权限,因/etc/nginx属root所有)

sudo cp /tmp/ssl/server.key /tmp/ssl/server.crt /etc/nginx/ssl/

# 再次设置私钥权限(确保复制后权限不变)

sudo chmod 600 /etc/nginx/ssl/server.key

步骤 2:修改 Linux 下 Nginx 配置文件

Linux 下 Nginx 的配置文件分为 “主配置”(/etc/nginx/nginx.conf)和 “站点配置”(/etc/nginx/conf.d/目录),推荐在conf.d下新建站点配置(避免修改主配置导致全局问题):

(1)创建站点配置文件

# 用vim编辑新建的https配置文件(文件名可自定义,如https-test.conf)

sudo vim /etc/nginx/conf.d/https-test.conf

(2)写入 HTTPS 配置(Linux 路径适配)

粘贴以下配置,注意替换server_name(Linux 服务器 IP / 域名)和root(网站根目录,如/var/www/html):

server {

# 监听Linux服务器443端口(HTTPS默认端口)

listen 443 ssl;

# 替换为你的Linux服务器IP或域名(与证书Common Name一致)

server_name 192.168.1.100;

# 证书路径(Linux下绝对路径,需与实际存放路径一致)

ssl_certificate /etc/nginx/ssl/server.crt;

ssl_certificate_key /etc/nginx/ssl/server.key;

# Linux下SSL优化配置(提升性能与安全性)

ssl_protocols TLSv1.2 TLSv1.3; # 禁用老旧协议

ssl_prefer_server_ciphers on;

ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA384;

ssl_session_cache shared:SSL:10m; # Linux下共享会话缓存

ssl_session_timeout 10m;

# 网站根目录(Linux下的实际目录,如/var/www/html)

root /var/www/html;

index index.html;

# 静态文件访问配置(适配Linux目录权限)

location / {

try_files $uri $uri/ =404;

# 若出现403错误,可添加以下权限配置(根据实际用户调整)

# autoindex on;

# allow all;

}

}

# 可选:Linux下HTTP自动跳转HTTPS(80端口重定向)

server {

listen 80;

server_name 192.168.1.100; # 与上面一致

return 301 https://$host$request_uri;

}

(3)保存退出 vim

在 vim 中按Esc键,输入:wq(保存并退出),若提示 “权限不足”,需确保已用sudo打开文件。

步骤 3:Linux 下检查 Nginx 配置并启动服务

Linux 下管理 Nginx 服务需用systemctl(主流发行版)或service命令,操作前必须先检查配置语法:

(1)检查配置语法

# 检查Nginx配置是否正确(Linux下需sudo权限)

sudo nginx -t

  • 若输出以下信息,说明配置正确:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

  • 若提示 “file not found”,需检查证书路径是否正确;若提示 “port in use”,需处理端口占用(见下文常见问题)。
(2)启动 / 重启 Nginx 服务

根据 Linux 发行版,使用对应的服务管理命令:

# 通用命令(CentOS 7+/Ubuntu 16.04+/Debian 8+)

sudo systemctl restart nginx

# 设置Nginx开机自启(Linux下推荐,避免重启服务器后服务失效)

sudo systemctl enable nginx

# 老旧系统(如CentOS 6)用service命令

# sudo service nginx restart

# sudo chkconfig nginx on

(3)验证 Nginx 服务状态

sudo systemctl status nginx

若输出 “active (running)”,说明 Nginx 已成功启动并加载 HTTPS 配置。

五、Linux 系统测试 HTTPS 服务:两种常用方式

在 Linux 系统中,可通过 “本地命令测试” 和 “远程浏览器测试” 两种方式验证服务:

1. Linux 本地命令测试(curl 工具)

Linux 系统通常预装curl,可直接在终端测试 HTTPS 连接:

# 测试HTTPS服务(替换为你的Linux服务器IP/域名)

curl -v https://192.168.1.100

  • 若输出中包含SSL connection using TLSv1.3 / …,且能看到网站 HTML 内容(如/var/www/html/index.html的内容),说明 HTTPS 配置成功;
  • 若提示 “SSL certificate problem”,属正常现象(自签名证书不被 curl 信任),可添加-k参数忽略证书验证:curl -vk https://192.168.1.100。

2. 远程浏览器测试(Linux 服务器需开放端口)

若需从其他设备(如 Windows 电脑)访问 Linux 服务器的 HTTPS 服务,需先在 Linux 中开放 443 端口(防火墙配置):

(1)开放 443 端口(Linux 防火墙)
  • Ubuntu/Debian(ufw 防火墙):

sudo ufw allow 443/tcp # 允许443端口TCP连接

sudo ufw reload # 重新加载防火墙

  • CentOS/RHEL(firewalld 防火墙):

sudo firewall-cmd –add-port=443/tcp –permanent # 永久开放443端口

sudo firewall-cmd –reload # 重新加载防火墙

  • 关闭防火墙(测试环境临时方案,不推荐生产):

# Ubuntu/Debian

sudo ufw disable

# CentOS/RHEL

sudo systemctl stop firewalld

(2)浏览器访问

在其他设备的浏览器中输入https://Linux服务器IP(如https://192.168.1.100),浏览器会弹出 “不安全” 警告(正常),点击 “高级”→“继续访问”,即可看到网站内容,说明服务正常。

六、Linux 系统常见问题与解决方案

1. Nginx 启动失败:“address already in use”(443 端口被占用)

在 Linux 中,可通过netstat或ss命令查看端口占用:

# 查看443端口占用进程(需安装net-tools,Ubuntu:sudo apt install net-tools)

sudo netstat -tulpn | grep 443

# 或用ss命令(Linux系统自带)

sudo ss -tulpn | grep 443

  • 若输出类似tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1234/httpd,说明 443 端口被httpd(Apache)占用;
  • 解决方案:停止占用进程(如sudo systemctl stop httpd),或修改 Nginx 监听端口(如listen 8443 ssl)。

2. 浏览器访问出现 403 Forbidden(权限问题)

Linux 下 Nginx 访问网站目录时,需确保目录和文件权限正确(Nginx 进程用户通常为www-data或nginx):

# 假设网站根目录为/var/www/html

# 设置目录权限为755(所有者r/w/x,其他r/x)

sudo chmod -R 755 /var/www/html

# 设置文件所有者为Nginx用户(Ubuntu/Debian用www-data,CentOS用nginx)

sudo chown -R www-data:www-data /var/www/html

3. 证书过期后如何更新(Linux 下快速操作)

无需重新配置 Nginx,只需重新生成证书并替换旧文件:

# 进入临时目录

cd /tmp/ssl

# 重新生成私钥和证书(步骤同第三章)

openssl genrsa -out server.key 2048

openssl req -new -key server.key -out server.csr # 按提示填写,Common Name不变

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

# 替换Nginx证书目录下的旧文件

sudo cp server.key server.crt /etc/nginx/ssl/

sudo chmod 600 /etc/nginx/ssl/server.key

# 重启Nginx生效

sudo systemctl restart nginx

七、Linux 系统下的额外建议

  • 证书备份:Linux 系统中建议将/etc/nginx/ssl目录备份到安全位置(如sudo tar -czf ssl_backup.tar.gz /etc/nginx/ssl),避免误删;
  • 生产环境迁移:若需将 Linux 服务器从测试环境切换到生产环境,需替换为 Let's Encrypt 免费证书,可通过certbot工具一键生成(Linux 下命令:sudo apt install certbot python3-certbot-nginx,再执行certbot –nginx -d 你的域名);
  • 日志查看:若 Nginx 出现异常,可查看 Linux 下的日志文件排查问题:sudo tail -f /var/log/nginx/error.log(错误日志)、sudo tail -f /var/log/nginx/access.log(访问日志)。
  • 总结

    在 Linux 系统下,自签名 HTTPS 证书的生成与配置全程通过命令行完成,核心步骤可归纳为:

  • 安装 OpenSSL(适配 Linux 发行版);
  • 生成证书文件(严格控制私钥权限);
  • 配置 Nginx(规范路径与服务管理);
  • 开放端口并测试(防火墙与权限适配)。
  • 掌握这套流程,能让你在 Linux 开发 / 测试环境中快速启用 HTTPS 服务,同时为后续生产环境的正式证书部署打下基础。

    赞(0)
    未经允许不得转载:171主机测评 » Linux 系统下 Nginx 自制 HTTPS 证书:从生成到配置的完整指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址