强制网址通过 HTTPS

强制网址通过 HTTPS

在我的工作中,http://twitter.com被阻止,但是https://twitter不是。有没有办法让所有程序/浏览器使用 HTTPS 协议而不是 HTTP 来访问此 URL?

这特别涉及需要访问网站的第三方客户端,但通常硬编码为 HTTP 而没有选项可以更改它们。

更新:我尝试按照下面的建议创建一个 fiddler 脚本,但无法正确运行。使用脚本的答案将非常有帮助,或者另一种完全由访问组成的方法。

答案1

我想知道所有第三方应用程序是否都会真正考虑代理设置。或者更改系统范围的代理设置是否会干扰其他应用程序。(例如,当公司的代理需要用于互联网访问时,因此不能仅仅为了重定向流量而更改。)幸运的是,当应用程序不使用 HTTPS 时,它就无法找到中间人。因此:在端口 80 上twitter.com设置中间人,使用twitter.com代表

以下步骤已在 Mac OS X 10.6 和 Windows XP 上使用具有完全管理权限的帐户进行了测试。

  1. 下载DeleGate。不要让 1990 年代的主页欺骗您:该程序仍在维护。

  2. 根据 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 就会很乐意使用它。

  3. 在您的/etc/hosts文件中(c:\windows\system32\drivers\etc\hosts在 Windows XP 上;请参阅 Wikipedia对于地点在其他操作系统上),添加以下行以将所有请求定向twitter.com到您自己的计算机。请注意,从域名到 IP 地址的映射不考虑协议。因此:这不仅可用于 HTTP,还可用于 HTTPS(以及其他所有内容,例如 之类的命令ping)。

    127.0.0.1 twitter.com
    
  4. 确保您的浏览器不是设置为使用代理服务器,或添加twitter.com为例外。如果您的浏览器缓存了 Twitter 的 IP 地址,您可能需要重新启动它。

  5. 现在,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

通过 DeleGate 发推特


当使用 明确请求 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

您需要某种具有重写规则功能的代理服务器。我怀疑,在没有更好的答案的情况下,您可以为Fiddler执行此操作。Fiddler 规则是用 JavaScript 编写的,并且网上有几个例子。

编辑:请参阅本页上 Eric Law 的回答并投票。

答案3

Fiddler规则很简单。在 OnBeforeRequest 内部,添加:

if (oSession.fullUrl.StartsWith("http://twitter.com/"))
{
    oSession.oRequest.headers.UriScheme = "https";
}

答案4

它是不免费,但查尔斯(Web 调试代理)具有“映射远程设置”功能,可以使用 GUI 轻松映射http://twitter.comhttps://twitter.com您可以从网站下载试用版,看看它是否满足您的需求。

替代文本

相关内容