在 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 系统下,自签名 HTTPS 证书的生成与配置全程通过命令行完成,核心步骤可归纳为:
掌握这套流程,能让你在 Linux 开发 / 测试环境中快速启用 HTTPS 服务,同时为后续生产环境的正式证书部署打下基础。




