强制网址通过HTTPS


7

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

这特别涉及需要访问站点的第三方客户端,但通常硬编码为HTTP而无需更改它们。

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


请记住,并非所有网站都可以使用https(尽管他们应该)
Josh Hunt

@joshhunt - 很好记住。这将特别适用于我知道https正在工作的网站,但http不适用。
dancramer

您是否在工作计算机上拥有管理权限?您使用的是哪个版本的Windows?
Arjan

通过管理员访问赢得XP
dancramer

好的,然后hosts应该可以更改文件,虽然感觉有点尴尬。如果您目前不需要使用某些公司代理(并且不介意支付一些错误),那么使用像Matthew建议的Charles Web调试代理也应该没问题,如果您的Twitter应用程序确实尊重这样的代理设置。(它可能是首选的明确使用时,它可能不会打破证书链https,虽然代表很可能也可以作为运行一个人在这方面的中间人HTTP到HTTPS网关应用程序正常的代理,该代理使用它。)
Arjan

Answers:


8

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

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

  1. 下载 DeleGate。不要让1990年的主页欺骗你:程序仍然保持。

  2. 告诉DeleGate根据HTTP请求中的Host头的值,将端口80(和443)上的所有本地请求转发到HTTPS服务器。与英特尔上的Mac一样(sudo需要使用1024以下的特权端口):

    sudo ./macosxi-dg -v -P80,443 \
    SERVER=https \
    RELAY=vhost \
    RESOLV=cache,dns \
    STLS=-fcl,fsv \
    ADMIN=a@b.c
    

    对于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 ADMIN=a@b.c
    

    如果您需要使用公司的代理进行Internet访问,那么如果您添加类似于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://twitter.com以下位置请求HTTPS站点:

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

Twitter通过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 ADMIN=a@b.c
[..]
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地址(因为我们已将其映射到hosts文件中的127.0.0.1 )。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

很棒的答案,得到例子,它就像一个魅力。谢谢Arjan!
dancramer

5

您需要某种具有重写规则功能的代理服务器。我怀疑,如果没有提供更好的答案,你可以为Fiddler写一个修饰符规则来做到这一点。Fiddler规则是用JavaScript编写的,在线几个例子。

编辑:请参阅此页面上的Eric Law的回答并进行投票。


我认为这将是要走的路,我将下载Fiddler,看看写重定向脚本有多难
dancramer

1
好吧,我做了一个真诚的努力,让它运行起来没有运气。我将需要一个脚本示例来真正实现这一目标。
dancramer

1
如果阻止不是在您自己的计算机上的每个应用程序级别发生,则代理服务器必须位于防火墙之外
reinierpost

1
@reinierpost,我想说的(附加)代理服务器需要内部防火墙(这样:一个工作站上),因为它需要重写HTTP到HTTPS试图通过防火墙之前。
Arjan

1
Fiddler脚本很简单,但这里的注释系统重新格式化注释中的代码,所以我在脚本中添加了一个额外的答案。
EricLaw

3

提琴手规则是非常简单的。在OnBeforeRequest中,添加:

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

尼斯。(希望所有第三方应用程序都支持系统范围的代理设置。如果还需要使用一些公司代理连接到互联网,那么显然Fiddler在其设置中也支持“链到上游网关代理”。)
Arjan

2

您可以通过使用VPN和隧道输出工作网络来逃避所有谴责。

VPN隧道涉及建立和维护逻辑网络连接(可能包含中间跃点)。在此连接上,以特定VPN协议格式构建的分组被封装在一些其他基站或载波协议中,然后在VPN客户端和服务器之间传输,最后在接收端解封装。

这意味着您的所有数据包都是通过互联网上的中间人发送的。该中介通常不会被贵公司的防火墙阻止,并且会将所有数据包转发到目的地,然后将收到的答案返回给您的计算机。此外,VPN连接可确保所有数据包都经过编码,并且不会被窥探。

您将获得商业产品的最佳服务,但有些是免费的,也不算太差。例如,HTTP-Tunnel Client是一个非常好的产品。


1

不是免费的,但查尔斯(网络调试代理)有可能被告知映射地图远程设置功能http://twitter.comhttps://twitter.com方便地使用GUI。您可以从网站下载试用版,看它是否符合您的需求。

替代文字


0

在Firefox下,似乎附加的Force-TLS可以解决您的问题。
引用:

以下是它的工作原理:

  1. 通过HTTPS提供的站点x.com在其响应中提供了标头X-Force-TLS。标头包含max-age值(记住强制TLS的时间长度)以及可选的includeSubDomains标志。
  2. 浏览器接收此标头并将其添加到Force TLS数据库。
  3. 将来,如果在请求到达网络之前通过HTTP尝试将对x.com的任何请求修改为通过HTTPS。
  4. 如果通过HTTP请求任何子域* .x.com并且设置了includeSubDomains标志,则它们也被强制为HTTPS。

适用于所有浏览器的解决方案非常复杂。我相信OP更喜欢简单的解决方案。
harrymc

1
OP不需要任何浏览器的解决方案(人们可以轻松地手动输入 https浏览器)。它是关于仅连接到HTTP的软件,其中URL无法更改。
Arjan

我相信他宁愿通过https连接到包含他需要转换为https的http链接的页面,因为http到该网站被阻止了。
harrymc

1
好吧,他确实写了这个特别涉及需要访问该网站的第三部分[y]客户端,但通常硬编码为http而没有更改它们的选项。...
Arjan

你可能是对的 - 我添加了另一个解决方案,使用VPN隧道解决计算机上的所有程序。
harrymc


-1

我觉得没有= /

有人可以展示一种方法来做到这一点,但看到这是一个软件开发人员:许多应用程序有http://twitter.com硬编码,因为不仅地址,但协议是不同的,我看不到一种自动完成的方法,无需更改应用程序。某些应用程序可能同时使用它们,因此您可以对其进行配置

注意: Web应用程序比桌面应用程序更糟糕。

编辑:好,crb。代理服务器,取决于Twitter被阻止的方式,可以帮助他。


1
这就是代理服务器派上用场的地方:)
crb

-1

或许,另一种解决方案是使用客户端,如DestroyTwitterTweetDeck。这些不直接使用twitter.com,而是通过可能未被阻止的API 发送和读取。


1
API就像浏览器一样使用HTTP(和twitter.com域名)。比如twitter.com/statuses/public_timeline.xmltwitter.com/statuses/user_timeline/codinghorror.xml?count=5
Arjan

这取决于他们如何阻止,如果他们阻止twitter.com它将工作,如果他们通过关键字或twitter.com/*阻止它将失败,它已经在各个地方得到
alpha1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.