新版Raspberry Pi OS下curl/wget访问老旧路由器https连接失败问题求助
故障根因
新版Raspbian(9及以上版本)默认禁用了TLS 1.0、SSLv3协议以及RC4这类存在安全隐患的加密套件,而Linksys WRT54GL的HTTPS接口仅支持TLSv1.0 + RC4-SHA的加密组合,因此会出现SSL握手失败的报错。
可行解决方法
方法1:命令行单独指定兼容参数(无需修改系统全局配置,推荐)
curl 可用命令
之前添加参数失效大概率是没有调整OpenSSL安全等级,新版OpenSSL默认安全等级为2,会主动拦截RC4等弱加密套件,正确命令如下:curl --insecure --tls-max 1.0 --ciphers 'DEFAULT@SECLEVEL=1:RC4-SHA' https://192.168.1.1
wget 可用命令
Raspbian 10默认的wget使用GnuTLS后端,和OpenSSL参数不兼容,可先替换为OpenSSL后端的wget:sudo apt update && sudo apt install -y wget-openssl
替换后执行命令:wget --no-check-certificate --secure-protocol=TLSv1 --ciphers 'RC4-SHA' -O /dev/null https://192.168.1.1/
方法2:永久修改系统OpenSSL配置(仅建议内网专用设备使用)
编辑系统OpenSSL配置文件/etc/ssl/openssl.cnf,在文件顶部的[default_conf]配置段下方新增如下内容:
ssl_conf = ssl_sect [ssl_sect] system_default = system_default_sect [system_default_sect] MinProtocol = TLSv1 CipherString = DEFAULT@SECLEVEL=1
保存退出后,所有调用OpenSSL的工具(包括curl、Perl的SSL模块)都会默认允许TLS 1.0协议和弱加密套件,无需额外加参数。
方法3:容器运行旧版本环境(不修改宿主配置,安全性最高)
如果不想降低宿主系统的安全等级,可以拉取旧版Debian Wheezy/Jessie的Docker镜像,在容器内运行你的Perl脚本,容器使用host网络模式即可直接访问内网路由器,完全规避加密兼容问题。
注意事项
TLS 1.0协议和RC4加密套件均已被证实存在严重安全漏洞,上述配置仅建议在内网访问专用设备时使用,不要用修改过配置的设备访问公网HTTPS服务。
内容的提问来源于stack exchange,提问作者Holly

