在我的工作中,http://twitter.com被阻止,但是https://twitter不是。有没有办法让所有程序/浏览器使用 HTTPS 协议而不是 HTTP 来访问此 URL?
这特别涉及需要访问网站的第三方客户端,但通常硬编码为 HTTP 而没有选项可以更改它们。
更新:我尝试按照下面的建议创建一个 fiddler 脚本,但无法正确运行。使用脚本的答案将非常有帮助,或者另一种完全由访问组成的方法。
答案1
我想知道所有第三方应用程序是否都会真正考虑代理设置。或者更改系统范围的代理设置是否会干扰其他应用程序。(例如,当公司的代理需要用于互联网访问时,因此不能仅仅为了重定向流量而更改。)幸运的是,当应用程序不使用 HTTPS 时,它就无法找到中间人。因此:在端口 80 上twitter.com
设置中间人,使用twitter.com
代表。
以下步骤已在 Mac OS X 10.6 和 Windows XP 上使用具有完全管理权限的帐户进行了测试。
下载DeleGate。不要让 1990 年代的主页欺骗您:该程序仍在维护。
根据 HTTP 请求中 Host 标头的值,告诉 DeleGate 将端口 80(和 443)上的所有本地请求转发到 HTTPS 服务器。例如对于 Intel 上的 Mac(需要
sudo
使用 1024 以下的特权端口):sudo ./macosxi-dg -v -P80,443 \ SERVER=https \ RELAY=vhost \ RESOLV=cache,dns \ STLS=-fcl,fsv \ [email protected]
对于 Windows,如果解压缩到
c:\
:cd c:\dg9_9_4\bin dg9_9_4.exe -v -P80,443 SERVER=https RELAY=vhost RESOLV=cache,dns STLS=-fcl,fsv [email protected]
如果您需要使用公司的代理来访问互联网,那么只要
PROXY=proxy.example.com:8080
在命令行中添加类似的内容,DeleGate 就会很乐意使用它。在您的
/etc/hosts
文件中(c:\windows\system32\drivers\etc\hosts
在 Windows XP 上;请参阅 Wikipedia对于地点在其他操作系统上),添加以下行以将所有请求定向twitter.com
到您自己的计算机。请注意,从域名到 IP 地址的映射不考虑协议。因此:这不仅可用于 HTTP,还可用于 HTTPS(以及其他所有内容,例如 之类的命令ping
)。127.0.0.1 twitter.com
确保您的浏览器不是设置为使用代理服务器,或添加
twitter.com
为例外。如果您的浏览器缓存了 Twitter 的 IP 地址,您可能需要重新启动它。现在,http://twitter.com真正得到了你(和你的所有应用程序)
https://twitter.com
。
输出显示确实从以下地址请求了 HTTPS 站点https://twitter.com
:
REQUEST - GET / HTTP/1.1
REQUEST = https://twitter.com:443/ GET / HTTP/1.1
[..]
ConnectToServer connected [16] {168.143.161.20:443 <- 192.168.1.68:57067}
## SSLway -- TLSxSNI: sent ru=0 ty=0 nm=localhost
## SSLway ## 0.459622 connected/accepted
## SSLway server's cert. =
**subject /
C=US/
O=twitter.com/
OU=GT09721236/
OU=See www.rapidssl.com/resources/cps (c)09/
OU=Domain Control Validated - RapidSSL(R)/
CN=twitter.com
**issuer /
C=US/
O=Equifax Secure Inc./
CN=Equifax Secure Global eBusiness CA-1
当使用MOUNT="/* https://twitter.com/*"
而不是RELAY=vhost
时,甚至http://localhost
会给出一个https://twitter.com
:
当使用 明确请求 HTTPS 时https://twitter.com
,受信任的证书链就会中断:支持 HTTPS 的应用程序将要发现中间人攻击,如果无法向您征求继续的许可,则会失败:
测试后,运行即服务在 Windows 上,只需删除该-v
参数。这会将程序安装为服务。然后它将在后台运行,并询问您是否要在启动时运行它:
Trying to start as a service [DeleGate Server -P80,443] ...
Set Automatic Start on System Startup ? [y] / n :
运行上述命令(不带参数)后-v
:请参阅控制面板 » 管理工具 » 服务以手动启动或停止 DeleGate。请注意,此服务将引用您最初启动该dg9_9_4.exe
程序的位置。因此,您不应删除或移动该程序;例如,请确保将下载文件解压到,c:\dg9_9_4
以避免引用您将来可能会删除的某些下载目录。
要删除服务,只需确保为参数指定相同的值-P
:
dg9_9_4.exe -P80,443 [email protected]
[..]
The service `DeleGate Server -P80,443' exists. Delete it ? [y] / n : y
OK. DELETEd the previous service.
Create a new service ? [y] / n : n
最后,有人可能想知道 DeleGate 如何知道 twitter.com 的 IP 地址(因为我们在文件中将其映射到 127.0.0.1 hosts
)。DeleGate 实际上自己检索了该地址,因为RESOLV=cache,dns
:
MOUNT[5]X[2] /* https://twitter.com/*
{R} SOA got [162.143.168.in-addr.arpa][ns1.dn.net]
[dnsadmin.enterprise.verio.net] 2008121001 10800 3600 604800 86400
答案2
答案3
这Fiddler规则很简单。在 OnBeforeRequest 内部,添加:
if (oSession.fullUrl.StartsWith("http://twitter.com/"))
{
oSession.oRequest.headers.UriScheme = "https";
}