我无法访问我的路由器网页http://192.168.1.1因为它被重定向到https://192.168.1.1(给我ERR_SSL_VERSION_OR_CIPHER_MISMATCH
)。我知道谷歌因为某些原因切换到了https,但我根本无法打开路由器。
失败的解决方案:
- 尝试在笔记本电脑上使用 Chrome 和 Edge,但无法打开网页。
- 尝试使用手机上的 chrome 打开网页,但无法打开网页
- 尝试打开
chrome://net-internals/#hsts
并查询192.168.1.1
但它给了我Not Found
;看来它不适用于 IP 以及网站。 - 尝试打开匿名网页,但打开网页失败。
这个问题是最近才出现的,stackoverflow 上的任何解决方案都无济于事。
有什么建议吗?
答案1
解决此问题的一种方法是通过反向代理。
- 在您的网络上放置一个 Web 服务器,例如 Apache;也许您已经有一个了。
- 为路由器创建一个主机名,例如
router.local
,它实际上只是 Web 服务器的别名,而不是 192.168.1.1。 - 在 Web 服务器中,创建一个虚拟主机定义,
router.local
其反向代理为 192.168.1.1。
下面是我实际使用的 Apache 定义。它需要加载一些模块,例如mod_proxy
和mod_https
当然mod_ssl
:
<VirtualHost *:443>
ServerName router.local
ServerAlias router
SSLEngine on
CustomLog /var/log/apache2/router.log common
ProxyPass "/" "http://192.168.1.1/"
ProxyPassReverse "/" "http://192.168.1.1/"
</VirtualHost>
您可能需要虚拟主机而不是仅仅代理子页面 URL 的原因webserver.local/router
在于路由器的 Web UI 可能包含对诸如 之类的资源的绝对引用。因此,浏览器将尝试从 Web 服务器获取这些资源/favicon.ico
,/script.js
例如 而不是webserver.local/style.css
。webserver.local/router/style.css
我的路由器就是这种情况。
HTTPS 连接终止于您的 Web 服务器,该服务器是最新的,并支持所有必需的 TLS 密码。代理连接到旧路由器(如果需要,甚至可以通过 HTTP 连接:在这种情况下,您可以通过将路由器和服务器直接连接在一起来降低风险)。
我没有在上面指定 SSL 凭据VirtualHost
,因此浏览器看到的证书是 Web 服务器自己的域的证书。该证书与router.local
域不匹配;它是供外部使用的真实证书,例如example.com
。浏览器将出现错误,并且必须被告知继续使用证书example.com
。https://router.local
(在 Google 手机上的最新 Chrome 上运行良好。)
解决不匹配问题的方法是创建一个用于路由器的自签名证书,然后VirtualHost
使用SSLCertificateFile
和其他参数在定义中指定它;但当然,您仍然需要在浏览器端接受自签名证书,这同样令人厌烦。