可能有些朋友和我一样在家里使用域名解析的公网IP地址,也或许有朋友使用了DDNS动态域名解析,本来开不开启 SSL 加密都是无所谓的,但为了安全起见自己还是决定给解析在 OpenWrt 上的域名加装个 https 加密证书,这样加密数据传输比较安全。

操作步骤

1、去申请域名证书,不推荐使用 Let's Encrypt 是有效期太短,需要在固件内部署自动续费,建议使用腾讯云、阿里云 或 Freessl 的年证书,彧繎是在 Freessl 购买的 3 年证书,如何申请就不多说了,自行解决吧。

申请HTTPS证书

2、接着确认 OpenWRT 固件是否安装 openssl 服务,如果没有安装或需要更新,可以通过以下命令解决,安装中途如出现:openssl: not found,可通过强制命令安装,如下:

# 安装 OpenSSL 服务
opkg update
opkg install luci-ssl-openssl libuhttpd-openssl
# 提示错误强制安装
opkg update
opkg install --force-reinstall libustream-openssl openssl-util

3、查看或修改 uhttpd 文件,文件位置在 /etc/config/uhttpd,使用SSH登录到 OpenWrt,执行以下命令进行查看 证书存放位置 和 证书格式,如下图:

vi /etc/config/uhttpd

查看证书存放位置与格式

4、下载 Nginx 使用格式证书,将 域名.pem 和 域名.key 修改为 uhttpd.crt 和 uhttpd.key,并上传到 /etc/ 目录下,如下图:

上传SSL加密证书到openwrt

5、然后再检查 uhttpd 文件内的 config uhttpd 'main' 内容是否为以下内容,如果正确无误,就可以进行重启 uhttpd 服务,安装成功后,如下图:

config uhttpd 'main'
    list listen_http '0.0.0.0:80' 
    # ipv4 http 端口 80
    list listen_http '[::]:80'
    # ipv6 http 端口 80
    list listen_https '0.0.0.0:443'
    # ipv4 https 端口 443
    list listen_https '[::]:443'
    # ipv6 https 端口 443
    option redirect_https '1'
    # http 访问强制跳转 https,可以不添加

# 重启 uhttpd 服务
/etc/init.d/uhttpd restart

openwrt成功开启https

注意事项

特别要注意的是证书上传的位置必须和 uhttpd 文件设置的存放位置相同,可以修改存放位置,默认为:/etc/ 目录。

如执行重启 uhttpd 服务后,未开启 https,那么请检查软件包内是否已正确安装 openssl 服务,也可通过 opkg remove 卸载干净原本的 openssl 服务后重新安装。