我正在尝试在我的计算机上创建HTTPS隧道。我的目的是将https://localhost:8888/<something>
(Fiddler正在收听的端口)的所有请求定向到https://myserver.net/<something>
。我按照Fiddler doc使用以下脚本:
static function OnBeforeRequest(oSession: Session) {
// <Fiddler 2 preexisting code>
// HTTPS redirect -----------------------
if (oSession.HTTPMethodIs("CONNECT") &&
(oSession.PathAndQuery == "localhost:8888"))
{
oSession.PathAndQuery = "myserver.net:443";
}
if (oSession.HostnameIs("localhost"))
oSession.hostname = "myserver.net";
// --------------------------------------
// <Fiddler 2 preexisting code>
}
同样在Fiddler设置中,我检查了解密检查并安装了证书,如下图所示:
我重新启动Fiddler,它提示我安装假证书,我同意。使用certmgr
时,我可以在Windows证书系统存储库中看到证书。这是一张自签名证书。
所以我做的是打开一个浏览器并输入:https://localhost:8888/mypage.html
,我得到的是一个错误。 Internet Explorer报告此:
错误:地址不匹配。由此提出的安全证书 网站是针对不同网站的地址发布的。这个问题 可能表示试图愚弄你或拦截任何数据......
当我获得证书信息时(基本上联系主机提供的证书被拒绝,可以显示相同的证书),我可以看到拒绝的证书是由Fiddler发布的,主题是 myserver.net
因此证书是正确的,因为它正在验证myserver.net
,我发现问题是我的浏览器可能期望主题为localhost
的证书。这是真的吗?
如何处理这种情况?
我可以理解,问题是我为网站发出的证书,我没有要求。所以解决方案是使用证书localhost:8888
?
答案 0 :(得分:1)
如果证书直接或间接(通过中间证书)由受信任的CA 和签名(如果主机名与证书匹配),则证书有效。如果不强制执行最后一个条件,那么拥有来自受信任CA的有效证书的任何人都可以合并任何其他站点。
要使用fiddler而不是遇到此问题,您应该将浏览器配置为使用fiddler作为Web代理,然后使用浏览器中的真实URL而不是fiddler的ip:port。