话说这年头搞个网站、搭个服务要是没个“小绿锁”HTTPS出门都不好意思跟人打招呼。但一提到HTTPS很多人脑子里立马蹦出“买域名、找CA、掏银子”这三部曲仿佛不经过这几道“手续”这加密的门就甭想开。常规操作通常是这样的第一步生成CSR证书签名请求平台帮你生成一串“天书”你得好好保管这可是后续的“身份证”。第二步提交申请填表、验证证明“这IP/域名真是我的”。有时候还得把自家大门端口映射出去给人家看或者提供其他“房本”证明。第三步支付费用选个“发证机构”CA人家可能还得收点“工本费”而且这费每年都得交跟交物业费似的。现在问题来了互联网上大家伙儿都用HTTPS“加密通话”了那我在自己家局域网比如公司内网、家里NAS搭的服务难道就只能“裸奔”HTTP吗能不能也给它套上“加密马甲”体验一下HTTPS的“安全感”当然能今天咱们就化身“局域网加密改造师”在一台安装了CentOS 9的“服务器老兄”身上动动手脚把原本只能“HTTPIP端口”访问的“土服务”华丽变身成支持“HTTPSIP端口”在局域网内横着走的“高级服务”。本篇“改造指南”灵感来源于一个开源项目——公众号文章导出工具wechat-article-exporter它就需要HTTPS支持才能正常工作见下图。咱们就拿它当“模特”抛砖引玉。学会了这招你家里的NAS、内网测试环境、甚至公司内部系统都能如法炮制CentOS 9这位“老兄”比较“朴素”不自带现成的应用服务器。不过没关系咱们请出江湖中久负盛名的“流量调度员”——Nginx用它来做反向代理这是最通用、最稳当的方案。一、准备工作环境扫盘CentOS 9开工前先给咱们的“服务器老兄”做个全身检查确保基础环境健康。打开终端依次输入以下命令# 1. 更新系统可选但建议做确保依赖库都是最新版 sudo dnf update -y 2. 检查防火墙状态CentOS 9默认用的是firewalld这位“门卫” sudo systemctl status firewalld 如果“门卫”在睡觉未启动就把它叫醒并设为常驻sudo systemctl start firewalld sudo systemctl enable firewalld 3. 暂时让SELinux“休息”一下避免它太“尽责”干扰我们测试生产环境可以微调规则 sudo setenforce 0 # 临时关闭 sudo sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config # 永久改为宽松模式需要重启生效二、第一准备创造自家“安全卡”自签名证书CA颁发的证书好比“官方身份证”咱们在自家局域网用完全可以自己当“派出所”签发一张“内部身份证”——这就是自签名证书。CentOS 9通常自带“制卡工具”OpenSSL直接开干核心秘诀证书的“姓名”Common Name, CN必须填服务器的内网IP咱们以192.168.1.100为例。1. 找个“钱包”创建证书存放目录# 创建一个专属目录别跟系统自带的证书混在一起方便管理 sudo mkdir -p /etc/nginx/ssl # 后续Nginx会来这里找“卡” sudo chmod 700 /etc/nginx/ssl # 提高安全性只让root能看 cd /etc/nginx/ssl # 进入“钱包”2. 创卡生成自签名证书执行以下命令记得把192.168.1.100换成你服务器的真实内网IPsudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout server.key \ -out server.crt \ -subj /CCN/STProvince/LCity/OLocal/CN192.168.1.100参数“黑话”解读-x509直接生成“终极版”自签名证书跳过CSR那些中间步骤一步到位-nodes生成的私钥不加密。不然每次Nginx启动都得输密码多麻烦-days 3650有效期10年。局域网用够够的了CN192.168.1.100重中之重这里必须填服务器的内网IP浏览器认的就是这个“脸”填错了它就“翻脸不认人”。其他字段C国家/ST省/L城市/O组织随便填点啥都行不影响局域网内使用就当给“卡”加点装饰。3. 查看“卡片”验证证书文件ls /etc/nginx/ssl/ # 应该能看到两个文件server.key私钥相当于“卡”的密码 和 server.crt证书就是“卡”本身 sudo chmod 600 /etc/nginx/ssl/* # 权限再加固一下仅root可读这步不做也行三、第二准备请来“管家”Nginx反向代理证书有了谁来负责“验卡”和“转接”呢就决定是你了NginxCentOS 9的软件仓库里就有它直接安装。它的任务就是在13000端口举例竖起一块“HTTPS接待处”所有加密请求来了它验完“卡”证书就转交给后面真正的HTTP服务比如运行在3000端口的那个。1. 聘请“管家”安装Nginx# 安装Nginx sudo dnf install -y nginx 启动“管家”并设为开机自启 sudo systemctl start nginx sudo systemctl enable nginx 看看“管家”上岗了没 sudo systemctl status nginx 看到 active (running) 就表示成功就位2. 给“管家”分配工作配置Nginx反向代理假设你原来的HTTP服务在127.0.0.1:3000上运行请替换成你的实际端口。现在让Nginx在13000端口搞个HTTPS接待处并转发请求。# 先把Nginx自带的默认“工作安排”备份一下避免冲突如果本来没有这步可跳过 sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak 创建我们自定义的HTTPS代理配置文件 sudo vim /etc/nginx/conf.d/https-proxy.conf把下面这份“工作说明书”贴进去重点替换里面标注的两处地方# 在13000端口设立HTTPS接待处用IP访问就行 server { listen 13000 ssl; # 核心13000端口 SSL启用HTTPS。用13000是为了不和原服务3000端口冲突。 listen [::]:13000 ssl; # 也接待IPv6的客人可选 server_name _; # 匹配所有IP地址咱不需要域名 # 加载我们自制的“安全卡”证书和私钥 ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; SSL优化配置CentOS 9推荐这么设更安全 ssl_protocols TLSv1.2 TLSv1.3; # 只用安全的TLS版本 ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; 反向代理到你的原有HTTP服务★这里换成你的实际端口★ location / { proxy_pass http://127.0.0.1:3000; # 比如你原来的服务跑在8080端口就改成8080 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 告诉后端“客人是从HTTPS通道来的” } }3. 检查“工作说明书”并重启“管家”验证配置并重启Nginx# 先检查“工作说明书”语法对不对关键避免有错别字导致“管家”罢工 sudo nginx -t # 如果输出 nginx: configuration file /etc/nginx/nginx.conf test is successful 就说明语法OK 语法无误就让“管家”重新加载新的工作安排 sudo systemctl restart nginx四、第三准备和“门卫”打招呼放行防火墙端口CentOS 9默认的防火墙“门卫”firewalld很负责会把不认识的端口比如我们新开的13000拦在外面。得告诉它“这位是自家兄弟放行”# 告诉“门卫”13000这个TCP端口是自家用的永久放行 sudo firewall-cmd --add-port13000/tcp --permanent “门卫”更新一下记忆 sudo firewall-cmd --reload 看看“门卫”的放行名单里有没有13000 sudo firewall-cmd --list-ports 应该能看到 13000/tcp五、开幕儿实战测试1. 在“老家”本地试试服务器本地测试先在服务器本机验证一下确保Nginx配置生效HTTPS通道能走通。打开终端执行# 用curl测试本地13000端口的HTTPS服务 curl -k https://127.0.0.1:13000 或者用更详细的命令查看证书信息 curl -k -v https://127.0.0.1:13000注意这里的-k参数是告诉curl“别管证书是不是自签名的直接连” 因为咱们用的是自签名证书浏览器和curl默认会拒绝-k就是让它忽略证书验证。如果看到类似下面这样的输出就说明HTTPS通道通了!DOCTYPE html html head title你的服务标题/title /head body h1Hello, HTTPS!/h1 /body /html如果返回的是502 Bad Gateway或404 Not Found别慌大概率是反向代理的目标地址proxy_pass没填对或者你原来的HTTP服务没启动。回头检查一下/etc/nginx/conf.d/https-proxy.conf里的proxy_pass地址以及你的应用服务是否在127.0.0.1:3000或你改的端口上正常运行。2. 在局域网其他设备试试真正的局域网访问本地测试通过后就该让局域网里的其他设备比如你的笔记本电脑、手机来访问了。记住访问地址是https://你的服务器内网IP:13000比如服务器IP是192.168.1.100那就在浏览器里输入https://192.168.1.100:13000第一次访问时浏览器会弹出一个大大的红色警告别怕这是正常现象因为浏览器不认识咱们自制的“身份证”自签名证书。点击高级或继续前往Chrome/Firefox或详细信息→继续访问Edge就能看到你的服务页面了。小贴士如果你想让这个警告消失可以在访问的电脑上把咱们生成的server.crt文件导入到系统的“受信任的根证书颁发机构”里。但局域网内用点一下“继续”也无妨。3. 常见问题排查如果连不上按下面这个清单挨个检查Nginx没启动或配置错误presudo systemctl status nginx # 查看状态 sudo nginx -t # 检查配置文件语法 sudo journalctl -u nginx --since 5 minutes ago # 查看最近5分钟日志防火墙没放行13000端口presudo firewall-cmd --list-ports # 确认13000/tcp在列表里如果不在重新执行放行命令sudo firewall-cmd --add-port13000/tcp --permanent sudo firewall-cmd --reloadSELinux拦住了如果之前只是临时关闭setenforce 0重启后可能又生效了。可以永久设为宽松模式或者给Nginx放行pre# 永久宽松模式需重启 sudo sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config或者给Nginx放行HTTPS端口sudo semanage port -a -t http_port_t -p tcp 13000证书路径或权限不对确保/etc/nginx/ssl/server.crt和server.key存在且Nginx有读取权限。原HTTP服务没启动检查你的应用是否在127.0.0.1:3000或你配置的端口上运行。4. 总结与拓展恭喜到这一步你的局域网服务已经成功穿上了“HTTPS马甲”。回顾一下咱们的改造流程自制身份证用OpenSSL生成自签名证书CN填服务器内网IP。请来管家安装Nginx配置反向代理让它在13000端口提供HTTPS服务。打通门卫放行防火墙端口确保局域网内能访问。实战验证本地测试→局域网访问搞定拓展玩法绑定域名如果你在内网有DNS服务器或改hosts可以把证书的CN改成域名如nas.home访问时用https://nas.home:13000更优雅。端口转发如果不想带端口号可以把Nginx的listen改成443 ssl标准HTTPS端口但要注意443端口可能被其他服务占用。多服务代理一个Nginx可以代理多个内网服务只需在/etc/nginx/conf.d/下创建多个.conf文件用不同端口或server_name区分。这套方案不仅适用于公众号文章导出工具任何需要HTTPS的局域网服务Nextcloud、Jellyfin、Home Assistant、内网GitLab等都可以照搬。记住核心自签名证书CN填内网IP或域名Nginx做反向代理防火墙放行端口。现在你的局域网服务也能享受“小绿锁”的安全感了赶紧去试试吧
CentOS 9:HTTPS 代理配置及局域网访问指南
话说这年头搞个网站、搭个服务要是没个“小绿锁”HTTPS出门都不好意思跟人打招呼。但一提到HTTPS很多人脑子里立马蹦出“买域名、找CA、掏银子”这三部曲仿佛不经过这几道“手续”这加密的门就甭想开。常规操作通常是这样的第一步生成CSR证书签名请求平台帮你生成一串“天书”你得好好保管这可是后续的“身份证”。第二步提交申请填表、验证证明“这IP/域名真是我的”。有时候还得把自家大门端口映射出去给人家看或者提供其他“房本”证明。第三步支付费用选个“发证机构”CA人家可能还得收点“工本费”而且这费每年都得交跟交物业费似的。现在问题来了互联网上大家伙儿都用HTTPS“加密通话”了那我在自己家局域网比如公司内网、家里NAS搭的服务难道就只能“裸奔”HTTP吗能不能也给它套上“加密马甲”体验一下HTTPS的“安全感”当然能今天咱们就化身“局域网加密改造师”在一台安装了CentOS 9的“服务器老兄”身上动动手脚把原本只能“HTTPIP端口”访问的“土服务”华丽变身成支持“HTTPSIP端口”在局域网内横着走的“高级服务”。本篇“改造指南”灵感来源于一个开源项目——公众号文章导出工具wechat-article-exporter它就需要HTTPS支持才能正常工作见下图。咱们就拿它当“模特”抛砖引玉。学会了这招你家里的NAS、内网测试环境、甚至公司内部系统都能如法炮制CentOS 9这位“老兄”比较“朴素”不自带现成的应用服务器。不过没关系咱们请出江湖中久负盛名的“流量调度员”——Nginx用它来做反向代理这是最通用、最稳当的方案。一、准备工作环境扫盘CentOS 9开工前先给咱们的“服务器老兄”做个全身检查确保基础环境健康。打开终端依次输入以下命令# 1. 更新系统可选但建议做确保依赖库都是最新版 sudo dnf update -y 2. 检查防火墙状态CentOS 9默认用的是firewalld这位“门卫” sudo systemctl status firewalld 如果“门卫”在睡觉未启动就把它叫醒并设为常驻sudo systemctl start firewalld sudo systemctl enable firewalld 3. 暂时让SELinux“休息”一下避免它太“尽责”干扰我们测试生产环境可以微调规则 sudo setenforce 0 # 临时关闭 sudo sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config # 永久改为宽松模式需要重启生效二、第一准备创造自家“安全卡”自签名证书CA颁发的证书好比“官方身份证”咱们在自家局域网用完全可以自己当“派出所”签发一张“内部身份证”——这就是自签名证书。CentOS 9通常自带“制卡工具”OpenSSL直接开干核心秘诀证书的“姓名”Common Name, CN必须填服务器的内网IP咱们以192.168.1.100为例。1. 找个“钱包”创建证书存放目录# 创建一个专属目录别跟系统自带的证书混在一起方便管理 sudo mkdir -p /etc/nginx/ssl # 后续Nginx会来这里找“卡” sudo chmod 700 /etc/nginx/ssl # 提高安全性只让root能看 cd /etc/nginx/ssl # 进入“钱包”2. 创卡生成自签名证书执行以下命令记得把192.168.1.100换成你服务器的真实内网IPsudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout server.key \ -out server.crt \ -subj /CCN/STProvince/LCity/OLocal/CN192.168.1.100参数“黑话”解读-x509直接生成“终极版”自签名证书跳过CSR那些中间步骤一步到位-nodes生成的私钥不加密。不然每次Nginx启动都得输密码多麻烦-days 3650有效期10年。局域网用够够的了CN192.168.1.100重中之重这里必须填服务器的内网IP浏览器认的就是这个“脸”填错了它就“翻脸不认人”。其他字段C国家/ST省/L城市/O组织随便填点啥都行不影响局域网内使用就当给“卡”加点装饰。3. 查看“卡片”验证证书文件ls /etc/nginx/ssl/ # 应该能看到两个文件server.key私钥相当于“卡”的密码 和 server.crt证书就是“卡”本身 sudo chmod 600 /etc/nginx/ssl/* # 权限再加固一下仅root可读这步不做也行三、第二准备请来“管家”Nginx反向代理证书有了谁来负责“验卡”和“转接”呢就决定是你了NginxCentOS 9的软件仓库里就有它直接安装。它的任务就是在13000端口举例竖起一块“HTTPS接待处”所有加密请求来了它验完“卡”证书就转交给后面真正的HTTP服务比如运行在3000端口的那个。1. 聘请“管家”安装Nginx# 安装Nginx sudo dnf install -y nginx 启动“管家”并设为开机自启 sudo systemctl start nginx sudo systemctl enable nginx 看看“管家”上岗了没 sudo systemctl status nginx 看到 active (running) 就表示成功就位2. 给“管家”分配工作配置Nginx反向代理假设你原来的HTTP服务在127.0.0.1:3000上运行请替换成你的实际端口。现在让Nginx在13000端口搞个HTTPS接待处并转发请求。# 先把Nginx自带的默认“工作安排”备份一下避免冲突如果本来没有这步可跳过 sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak 创建我们自定义的HTTPS代理配置文件 sudo vim /etc/nginx/conf.d/https-proxy.conf把下面这份“工作说明书”贴进去重点替换里面标注的两处地方# 在13000端口设立HTTPS接待处用IP访问就行 server { listen 13000 ssl; # 核心13000端口 SSL启用HTTPS。用13000是为了不和原服务3000端口冲突。 listen [::]:13000 ssl; # 也接待IPv6的客人可选 server_name _; # 匹配所有IP地址咱不需要域名 # 加载我们自制的“安全卡”证书和私钥 ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; SSL优化配置CentOS 9推荐这么设更安全 ssl_protocols TLSv1.2 TLSv1.3; # 只用安全的TLS版本 ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; 反向代理到你的原有HTTP服务★这里换成你的实际端口★ location / { proxy_pass http://127.0.0.1:3000; # 比如你原来的服务跑在8080端口就改成8080 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 告诉后端“客人是从HTTPS通道来的” } }3. 检查“工作说明书”并重启“管家”验证配置并重启Nginx# 先检查“工作说明书”语法对不对关键避免有错别字导致“管家”罢工 sudo nginx -t # 如果输出 nginx: configuration file /etc/nginx/nginx.conf test is successful 就说明语法OK 语法无误就让“管家”重新加载新的工作安排 sudo systemctl restart nginx四、第三准备和“门卫”打招呼放行防火墙端口CentOS 9默认的防火墙“门卫”firewalld很负责会把不认识的端口比如我们新开的13000拦在外面。得告诉它“这位是自家兄弟放行”# 告诉“门卫”13000这个TCP端口是自家用的永久放行 sudo firewall-cmd --add-port13000/tcp --permanent “门卫”更新一下记忆 sudo firewall-cmd --reload 看看“门卫”的放行名单里有没有13000 sudo firewall-cmd --list-ports 应该能看到 13000/tcp五、开幕儿实战测试1. 在“老家”本地试试服务器本地测试先在服务器本机验证一下确保Nginx配置生效HTTPS通道能走通。打开终端执行# 用curl测试本地13000端口的HTTPS服务 curl -k https://127.0.0.1:13000 或者用更详细的命令查看证书信息 curl -k -v https://127.0.0.1:13000注意这里的-k参数是告诉curl“别管证书是不是自签名的直接连” 因为咱们用的是自签名证书浏览器和curl默认会拒绝-k就是让它忽略证书验证。如果看到类似下面这样的输出就说明HTTPS通道通了!DOCTYPE html html head title你的服务标题/title /head body h1Hello, HTTPS!/h1 /body /html如果返回的是502 Bad Gateway或404 Not Found别慌大概率是反向代理的目标地址proxy_pass没填对或者你原来的HTTP服务没启动。回头检查一下/etc/nginx/conf.d/https-proxy.conf里的proxy_pass地址以及你的应用服务是否在127.0.0.1:3000或你改的端口上正常运行。2. 在局域网其他设备试试真正的局域网访问本地测试通过后就该让局域网里的其他设备比如你的笔记本电脑、手机来访问了。记住访问地址是https://你的服务器内网IP:13000比如服务器IP是192.168.1.100那就在浏览器里输入https://192.168.1.100:13000第一次访问时浏览器会弹出一个大大的红色警告别怕这是正常现象因为浏览器不认识咱们自制的“身份证”自签名证书。点击高级或继续前往Chrome/Firefox或详细信息→继续访问Edge就能看到你的服务页面了。小贴士如果你想让这个警告消失可以在访问的电脑上把咱们生成的server.crt文件导入到系统的“受信任的根证书颁发机构”里。但局域网内用点一下“继续”也无妨。3. 常见问题排查如果连不上按下面这个清单挨个检查Nginx没启动或配置错误presudo systemctl status nginx # 查看状态 sudo nginx -t # 检查配置文件语法 sudo journalctl -u nginx --since 5 minutes ago # 查看最近5分钟日志防火墙没放行13000端口presudo firewall-cmd --list-ports # 确认13000/tcp在列表里如果不在重新执行放行命令sudo firewall-cmd --add-port13000/tcp --permanent sudo firewall-cmd --reloadSELinux拦住了如果之前只是临时关闭setenforce 0重启后可能又生效了。可以永久设为宽松模式或者给Nginx放行pre# 永久宽松模式需重启 sudo sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config或者给Nginx放行HTTPS端口sudo semanage port -a -t http_port_t -p tcp 13000证书路径或权限不对确保/etc/nginx/ssl/server.crt和server.key存在且Nginx有读取权限。原HTTP服务没启动检查你的应用是否在127.0.0.1:3000或你配置的端口上运行。4. 总结与拓展恭喜到这一步你的局域网服务已经成功穿上了“HTTPS马甲”。回顾一下咱们的改造流程自制身份证用OpenSSL生成自签名证书CN填服务器内网IP。请来管家安装Nginx配置反向代理让它在13000端口提供HTTPS服务。打通门卫放行防火墙端口确保局域网内能访问。实战验证本地测试→局域网访问搞定拓展玩法绑定域名如果你在内网有DNS服务器或改hosts可以把证书的CN改成域名如nas.home访问时用https://nas.home:13000更优雅。端口转发如果不想带端口号可以把Nginx的listen改成443 ssl标准HTTPS端口但要注意443端口可能被其他服务占用。多服务代理一个Nginx可以代理多个内网服务只需在/etc/nginx/conf.d/下创建多个.conf文件用不同端口或server_name区分。这套方案不仅适用于公众号文章导出工具任何需要HTTPS的局域网服务Nextcloud、Jellyfin、Home Assistant、内网GitLab等都可以照搬。记住核心自签名证书CN填内网IP或域名Nginx做反向代理防火墙放行端口。现在你的局域网服务也能享受“小绿锁”的安全感了赶紧去试试吧