OpenWrt 后台默认 HTTP 明文,登录密码易被同网段抓包。改用 HTTPS 需安装 SSL 组件、获取证书(内网自签,有域名用 acme.sh)并配置 uHTTPd 监听 443、设置证书路径和 HTTP 跳转。注意私钥权限与防火墙放行,异常时可更换 SSL 后端。
OpenWrt 后台默认是 HTTP 明文访问,登录密码在网络上裸奔,同一网段的人抓个包就能拿到。给它配上 SSL 证书走 HTTPS 就安全多了。整件事拆开就是三步:装 SSL 支持库 → 弄到证书 → 配置 uHTTPd。下面按这个顺序讲,内网用自签证书、有域名用 acme.sh 两条路都给出来。
一、安装 SSL 支持组件
先用 SSH 登录路由器(Windows 用 MobaXterm 或自带的 ssh 命令),执行:
opkg update && opkg install openssl-util luci-app-uhttpd
如果 wget 抓 HTTPS 地址时报错,说明缺少 CA 根证书和 SSL 后端,再补一条:
opkg install libustream-openssl ca-certificates
二、生成自签证书(内网无域名适用)
先建目录:
mkdir -p /etc/ssl/private /etc/ssl/certs
生成私钥:
openssl genrsa -out /etc/ssl/private/selfsigned.key 2048
签发证书,-days 365 是有效期天数,-subj 里按需改成自己的信息:
openssl req -x509 -nodes -days 365 \
-key /etc/ssl/private/selfsigned.key \
-out /etc/ssl/certs/selfsigned.crt \
-subj "/C=CN/ST=Local/L=Home/O=OpenWrt/CN=router.lan"
没有域名又想少一点浏览器警告,可以额外加 -addext "subjectAltName=IP:192.168.11.1",把 IP 写进证书(换成你自己的路由器地址)。
三、有域名:用 acme.sh 申请免费证书
自签证书浏览器会提示「不安全」,内网自用无所谓,要从外网访问就得用正规证书。acme.sh 一条命令搞定申请和续期:
curl https://get.acme.sh | sh
acme.sh --issue --dns dns_cf -d 你的域名
--dns dns_cf 表示用 Cloudflare 的 DNS 接口做验证,需要先在环境变量里配置 CF 的 API Token。其他 DNS 服务商把参数换成对应的即可。
证书签发下来还要安装到 uHTTPd 能读到的位置(直接引用 acme.sh 目录的话,续期后路径会变):
acme.sh --install-cert -d 你的域名 \
--key-file /etc/ssl/private/selfsigned.key \
--fullchain-file /etc/ssl/certs/selfsigned.crt \
--reloadcmd "/etc/init.d/uhttpd restart"
不想折腾命令行的话,也可以在 《RouterOS/OpenWrt 配置 HTTPS:openssl 自签证书全流程》 里看另一种手动签发方式,或者走 FreeSSL 这类网站申请一年期证书。
四、配置 uHTTPd 并启用 HTTPS
编辑配置文件:
vi /etc/config/uhttpd
确认里面几项写对,重点是监听地址和证书私钥路径:
config uhttpd 'main'
list listen_http '0.0.0.0:80'
list listen_https '0.0.0.0:443'
option cert '/etc/ssl/certs/selfsigned.crt'
option key '/etc/ssl/private/selfsigned.key'
option redirect_https '1'
listen_https:让 uHTTPd 在 443 端口提供 HTTPS,没有这一行只有证书也不生效cert/key:证书和私钥路径,用前面生成或安装的那个redirect_https '1':把 HTTP 请求强制跳 HTTPS,可选,加上更安全
保存后重启服务生效:
/etc/init.d/uhttpd restart
之后浏览器访问 https://路由器IP,能正常打开就说明配置成功了。
五、常见问题
uHTTPd 时不时不响应或直接崩掉:这是部分 OpenWrt 版本上 libustream-openssl 的老问题,换一套 SSL 后端即可:
opkg remove libustream-openssl
opkg install libustream-wolfssl
也可以装 libustream-mbedtls。三者选一个就行:OpenSSL 功能全但占内存大,WolfSSL 轻量适合小内存设备,mbedTLS 在 ARM 上表现更好。装完用这条确认:
opkg list-installed | grep -E 'libustream|ca-certificates'
浏览器提示「您的连接不是私密连接」:自签证书的必然结果,点「高级 → 继续访问」即可,内网自用不必在意。
证书怎么选:只在家里访问 → 自签;要从外网访问 → Let’s Encrypt 三个月自动续期、Cloudflare 源服务器证书十五年、或者国内的 FreeSSL 一年期。
六、几点安全提醒
- 证书和私钥别放在 web 目录(
/www)下面,会被人直接下载 - 私钥权限设 400,证书设 444,命令:
chmod 400 /etc/ssl/private/selfsigned.key - 443 端口要在防火墙放行,外网访问还要在路由器上做端口映射
以上步骤由大番茄(997wan.com)整理并实机验证,不同 OpenWrt 版本的菜单名称可能略有差异,遇到问题欢迎留言讨论。
- 文章名称:OpenWrt 配置 SSL 证书并开启 HTTPS 访问(自签 + acme.sh)
- 文章永久网址:https://www.997wan.com/openwrt-ssl-certificate-https/
- 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长 997笔记 进行删除处理。
- 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
- 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
- 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
- 如无特别声明本文即为原创文章仅代表个人观点,版权归《997笔记》所有,欢迎转载,转载请保留原文链接。