有一个桌面客户端A通过https连接到网站W。

A --> W


在A和W之间有一个代理G。

A --> G --> W



在这种情况下,G能够从W获得A
以前获得的证书吗?
如果G可以得到该证书,那意味着G能够解密数据?


#1 楼

HTTPS如何工作?

HTTPS基于公用/专用密钥加密。这基本上意味着存在一个密钥对:公钥用于加密,而私钥则用于解密。

证书基本上是带有标识所有者的标签的公钥。

因此,当您的浏览器连接到HTTPS服务器时,该服务器将使用其证书进行回答。浏览器检查证书是否有效:


所有者信息必须与用户请求的服务器名称匹配。
证书需要由受信任的证书颁发机构签名。

如果不满足以下条件之一,则会通知用户该问题。

验证后,浏览器将提取公钥并将其用于加密某些内容。信息发送到服务器之前。服务器可以解密它,因为服务器具有匹配的私钥。

HTTPS如何防止中间人攻击?


在这种情况下,G可以从W获得A先前获得的证书吗?是的,证书是带有标签的公钥。 Web服务器会将其发送给连接它的任何人。


如果G可以获取证书,这是否意味着G能够解密数据?


不。证书包含Web服务器的公钥。恶意代理不拥有匹配的私钥。因此,如果代理将真实证书转发给客户端,则它无法解密客户端发送到Web服务器的信息。

代理服务器可能尝试伪造证书并提供自己的公共密钥。但是,这将破坏证书颁发机构的签名。浏览器将警告证书无效。

代理服务器是否可以读取HTTPS?

如果您的计算机管理员合作,则代理服务器可能会嗅探https连接。在某些公司中使用此证书来扫描病毒并强制执行可接受的使用准则。

已建立本地证书颁发机构,管理员告诉您的浏览器该CA是可信赖的。代理服务器使用此CA对他的伪造证书进行签名。

当然,用户倾向于单击安全警告。

评论


如果管理员和计算机配合,则不会出现证书警告。用户如何知道代理是否收听对话?我的公司Afaik扫描https,但是当我检查https站点的证书时,在链信任中没有看到自签名证书。

–卡尔马留斯
2013年6月12日10:31



您可以检测到它。第一,您的公司证书不是自签名证书。它是由权威机构正式签名的证书,该证书自动嵌入世界上的所有Internet Explorer中。要在不通知您的情况下检测所有魔术证书津贴,有一条唯一但困难的道路。删除Internet Explorer中所有经过魔术授权的根证书。从这个起点开始,您将必须明确接受所有服务器证书。您将必须阅读,理解它们并接受您信任的对象。

– dan
2014年1月6日在21:40



一个问题是:我看不到离开网络的内容,但是服务器发送回浏览器的响应又如何了,现在我有了公共密钥,这是否意味着我可以解码所有响应并且看到了浏览器的全部内容看到了吗?

–缩放
14-9-16'2:44



W将其发送回A的响应又如何呢? G可以阅读吗?

–se7entyse7en
2015年10月20日,9:43

@ se7entyse7en没有。就像W具有私钥一样,A在通信开始时也建立了这样的密钥。 G没有这两个键。

– Jiggunjer
16年4月2日在20:31

#2 楼

假设用户没有单击证书警告(并假设您正在运行未修改的客户端),答案是:否,代理无法解密数据。

有关HTTPS如何阻止的详细说明中间人解密您的流量后,可以查看SSL / TLS上的任何标准资源,例如,


,人们如何观察建立的HTTPS连接不会不知道如何解密吗?
TLS上的维基百科页面

PS该证书是公共数据。它包含服务器的公钥和域名,两者都不是秘密。遵守证书不会帮助攻击者解密数据。 (是的,代理可以观察证书,但这是无害的。)

评论


假设没有根CA被弹出并失去对其私钥的控制。

– devnul3
2011年10月22日19:14

一个合理的假设是,(根和委托)CA将向其国家情报机构提供伪造的证书。显然,使用这些类型的证书的代理设备可能是偶然的公开销售。

– Tom Hawtin-大头钉
2011年10月25日,0:23

实际上,Blue Coat ProxySG长期以来一直在HTTPS上执行MiTM,这取决于在通过它们进行访问的客户端上安装的自定义受信任证书,基本上是在作为高速缓存代理的基础上假装为CA。通过在客户端上安装受信任的根证书,然后通过其欺骗的CA服务器代理所有请求,诺基亚(Nokia),Opera mobile,亚马逊Kindle等也是如此。简而言之,声称或似乎正在缓存,重新压缩或以其他方式优化HTTPS内容的任何人都在这样做。

– TildalWave
2013年4月22日19:36



当然,代理可以解密数据-您为代理建立一个ssl conn,该代理将解密所有内容,然后在响应中建立到实际目的地的ssl conn,反之亦然:zdnet.com/article/…

– markmnl
2015年11月27日,1:13



@markmnl这要求将客户端设置为信任代理的证书,或者用户盲目忽略由此产生的错误消息(坦率地说,这是一个不错的选择)。在您链接的文章中:“如果您的公司正确设置了代理,您将不会发现任何问题,因为他们会安排在您的计算机上将代理的内部SSL证书注册为有效证书。否则,您会收到一条弹出错误消息,如果单击继续,它将接受“伪造”数字证书。”

–劳伦斯·贝拉克斯(LawrenceVelázquez)
2015年12月25日在18:18

#3 楼

摘自Philipp C. Heckel的技术博客,进行了一些轻松的编辑:

虽然无需处理X.509证书和证书颁发机构(CA)即可攻击未加密的HTTP流量,但是SSL加密的HTTPS连接可以加密客户端与服务器端到端之间的每个请求和响应。并且由于传输的数据是使用共享机密加密的,因此中间人(或代理)无法解密交换的数据包。当客户端打开到安全Web服务器的SSL / TLS连接时,它将通过检查两个条件来验证服务器的身份:首先,它检查其证书是否由客户端已知的CA签名。其次,确保服务器的公用名(CN,也:主机名)与它连接的公用名匹配。如果两个条件都成立,则客户端假定连接是安全的。
为了能够嗅探到连接,代理服务器可以充当证书颁发机构,但是,不是一个非常值得信赖的证书颁发机构:代替颁发证书对于实际的个人或组织,代理会动态生成证书以生成连接所需的任何主机名。例如,如果客户端要连接到https://www.facebook.com,则代理会为“ www.facebook.com”生成一个证书,并使用其自己的CA对其进行签名。如果客户端信任此CA,则上述两个条件都为真(可信的CA,相同的CN),这意味着客户端认为代理服务器实际上是“ www.facebook.com”。下图显示了此方案的请求/响应流。这种机制称为透明HTTPS代理。

要使此攻击起作用,必须满足一些条件:


代理服务器作为标准网关(HTTP和HTTPS):对于HTTP和HTTPS代理,代理服务器当然必须能够截获IP数据包-这意味着它必须位于数据包路径的某个位置。实现此目的的最简单方法是将客户端设备中的默认网关更改为代理服务器地址。受信任的代理CA(仅HTTPS):若要使HTTPS代理正常工作,客户端必须知道(和信任!)必须将代理CA(即CA密钥文件)添加到客户端的信任存储中。


如果您对透明嗅探纯SSL套接字感兴趣,您可以可能需要尝试SSLsplit(透明的TLS / SSL中间人代理)。攻击SSL的方法有很多,但是您不需要伪造的SSL证书,恶意的证书颁发机构(CA)或安全专家Moxie Marlinspike的中间人SSL攻击的变体。当您只需购买SSL侦听代理(例如Blue Coat Systems的ProxySG或最近购买的Netronome SSL设备)来为您完成工作时,为什么还要麻烦呢?


来自ZDNet上的Steven J. Vaughan-Nichols(摘录):

Blue Coat是SSL拦截业务中的佼佼者,它远非唯一提供SSL拦截并打破常规的公司。例如,直到最近,Microsoft才会向您出售一个程序Forefront Threat Management Gateway 2010,它也可以为您完成这项工作。有了SSL拦截代理程序或设备,实际发生的事情是:

如果您的公司正确设置了代理服务器,您将不会发现任何问题,因为它们会安排在您的计算机上将代理服务器的内部SSL证书注册为有效证书。否则,您将收到一条弹出错误消息,如果单击继续,它将接受“伪造”数字证书。无论哪种情况,您都可以安全地连接到代理,可以安全地连接到外部站点,并且通过代理发送的所有内容都可以用纯文本格式读取。哎呀。


评论


是否可以从中间人生成的原始Facebook证书中分辨出来?

–stiv
16年7月1日在18:21

@manav是否可以通过告诉facebbok.com并显示在任何可以使用证书的位置来确定?

– Sudhanshu Gaur
17年2月6日在22:30



@SudhanshuGaur您真的相信以上信息足以破解facebbok.com!所提供的信息是非常基础的,而且是旧的,当今的组织安全系统在硬件和软件加密/解密方面均遥遥领先

–manav m-n
17 Mar 19 '17在20:53



#4 楼

根据您所使用的网络的配置,管理员可能可以查看HTTPS连接(以及VPN)的内容。

显然有可能拦截网络流量,但是通常的问题是它们不能为您访问的所有站点颁发有效的证书,因此您会在每个站点看到很多证书警告。当您访问HTTPS网站时,如果他们试图解密流量以查看它。

但是,如果您使用公司提供的计算机,他们可以安装新的证书颁发机构,然后使用这样就可以为您访问的网站创建SSL证书,因此不会出现问题。

在VPN方面,如果VPN不使用SSL,则可能会更加复杂,但是同样的理论也适用。如果您从他们控制的网络上其他人拥有的计算机访问Internet,则他们很可能可以访问您输入的任何内容。

如果您希望避免此类问题,我希望使用您拥有/控制的设备访问Internet,这样一来,如果发生SSL拦截,您将得到警告。

#5 楼

正确,企业网络管理员使用自己的CA对TLS客户端实施中间人攻击,以便他们可以看到离开网络的内容。他们可能会使用一种设备,该设备会在您访问gmail.com时即时创建对gmail.com有效的证书。他们这样做的原因不是扮演Evil博士,而是因为他们可以防止商业秘密通过互联网连接从建筑物中窜出。严重的是,不要在工作计算机上进行私人银行业务。

如果您使用的软件产品不使用系统证书存储(例如OpenVPN实例),那么不能,他们不能拦截和解码您的流量,因为您不信任他们的CA。例如,使用Firefox便携式应用程序可能会获得相同的结果。在大多数浏览器中,您可以检查安全连接的详细信息,并查看谁是CA,以确保谁在侦听。

#6 楼

代理可以阻止https,并且仅允许浏览器中的http。然后,它可以启动自己的https连接,以将请求传递到服务器。

大多数用户不会注意到。

HSTS应该可以阻止这种情况,但并未得到广泛使用。

#7 楼

SSL终止或SSL代理产品(例如Bluecoat)需要安装在您的网络上,并考虑成本,所涉及的安装过程以及任何组织安装这些产品的组织所具有的常规安全策略-使用商业SSL终止产品的恶意攻击者的威胁是几乎为零。 OTOH-可以访问NOC(网络运营中心)的受信任内部人员实际上可以监视SSL终止的流量并泄露敏感信息。

对于实施DLP的公司来说,这是一个普遍的担忧(无论是否合理)系统。

却能说明一切-在家庭银行业务领域中,存在另一种常见的攻击媒介,它不需要网络代理,并且在浏览器中是背负式攻击(spigback / shim)攻击-自DOM在到达SSL管道之前可以访问纯文本流量-这是一种方便的攻击手段,通常通过浏览器扩展程序进行安装。关于垫片的Stackexchange上有一篇很好的文章-垫片(又名polyfill)是否可以在用户不知情的情况下安装到IE,FF或Chrome中,并且它可以读取用户在登录页面上输入的密码吗?