我正在尝试了解SSL / TLS。以下是对方案的描述和一些假设,希望您可以确认或驳斥。

问题

我的雇主如何成为一名当家?当我连接到Gmail时处于中间位置?他完全可以吗?

那就是:雇主可以解密我的工作计算机上的浏览器与雇主的Web代理服务器之间的连接,是否可以以纯文本格式读取数据,例如病毒扫描,重新加密数据并在不通知我的情况下将其发送给Google?

员工计算机上的浏览器<->雇主的Web代理服务器<-> Gmail服务器

雇主可以在公司计算机上安装任何自签名证书。毕竟,这是他的基础结构。

方案:我在做什么


使用浏览器打开http://www.gmail.com(注意http,不是https)
我被重定向到Google登录页面:https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss= 1&scc = 1&ltmpl = default&ltmplcache = 2&emr = 1

我输入我的用户名和密码
我重定向到Gmail:https://mail.google.com/mail/u/0/? pli = 1#inbox

我在浏览器中单击SSL锁定图标...

...并看到以下内容:


发布到:mail.google.com
发布者:“雇主公司名称”
有效期自:2014年1月1日至2014年12月31日
认证路径:“雇主公司名称” “->”雇主Web代理服务器名称“-> mail.google.com

假设

我现在假设浏览器中的SSL锁定图标变为绿色,但实际上我的浏览器与Gmail服务器之间没有安全连接。

这是正确的吗?

资源

我已经阅读了这些资源,但仍然不太了解:


有没有办法检测活跃的中间人?

防止中级欺骗的男人吗?
SSL / TLS如何工作?

摘要



有人可以当男人吗?中间是否有人控制IT基础架构?如果是的话,究竟是什么?
我的登录名和密码是否在雇主的Web代理服务器上以纯文本格式读取?
我应该在浏览器中检查些什么,以验证我与浏览器之间是否存在安全连接

编辑,2014年7月18日


不关心隐私。我只是想知道TLS在这种特定情况下是如何工作的。在此特定情况下,雇主必须采取什么其他方式来拦截通讯(键盘记录器等)。
法律问题无关紧要。允许员工在一定限制内使用公司的IT设备进行私人通信。另一方面,雇主保留在不违反隐私的情况下进行监控的权利。


评论

至少您的雇主很公平,可以使用自己的名字作为证书,因此您可以看到它。要找出他是否复制了原证书中的所有内容,而只更改了密钥和校验和,将变得更加困难。

令人震惊的是,由于站点认为HTTPS足够好,因此它们未部署SRP来帮助确保密码安全simbo1905.wordpress.com/2014/05/16/…

Google实施HSTS来帮助解决此特定问题。 HSTS是HTTP严格传输安全性,可以锁定Gmail使用的证书的CA。使用支持HSTS的浏览器来帮助防止中间人攻击。

@ simbo1905可能是Mozilla等人的影响。推送“使用HTTPS,它使您安全!”给不完全了解它的人。 (发布时仍然如此,对吧?)

@ gottlieb76-您确定吗?我认为,如果雇主在您要连接的计算机上安装了根CA证书,则HSTS不会防止他们以MITM方式截取数据。

#1 楼

您的假设绝对正确。

如果您使用的是雇主拥有和操作的计算机,则他们实际上可以完全控制您的通信。根据您提供的内容,他们安装了根CA证书,该证书允许他们自己为Google签名证书。

这在企业中并不少见,因为它允许检查加密流量是否存在病毒或数据泄漏。

回答三个问题:


是的,这是很有可能的。他们在监视这些事情上的活跃程度未知。
您的雇主可以用纯文本格式读取您的密码。我不知道您对网络服务器的含义。
您可以检查证书,看看是谁签名了。您还可以将指纹与Google指纹进行比较(从业务控制范围之外的第三方进行检查)。

编辑:


我的雇主能够完全做到这一点解密吗?您也许可以详细说明一下吗?


您正在使用错误的证书连接到诸如防火墙之类的中间设备,然后该设备正在使用正确的证书。从您的客户端到MITM的通信经过加密,然后解密,然后在到达Google的途中重新加密。

评论


@Lernkurve:如果是一个中间人,您的浏览器将收到您雇主伪造的Gmail证书,而不是真实的Gmail证书。通常,浏览器会检测到这种情况,因为假定不可能伪造由可信CA颁发的公共密钥,但是如果您的公司安装了自己的根CA证书,则浏览器将信任公司CA颁发的任何证书,并且不会发出任何警告。

– Lie Ryan
2014年7月17日在11:17



值得注意的是,在许多司法管辖区中,这可能被视为侵犯了隐私权(请参阅《 UDHR》第12条),具体取决于您的雇主告诉您他们在做什么。

–symcbean
2014年7月17日下午13:26

@Lernkurve您的浏览器正在使用您雇主证书中的公共密钥对其进行加密。然后,您的雇主的网络监视设备使用雇主证书中的私钥对消息解密(并确保您没有将私有数据走私)。然后,它使用Google的公钥重新加密您的消息,并将其发送给Google。相反,谷歌的响应过程与此相同。

–丹在火光中摆弄
2014年7月17日下午13:40

@symcbean在某些国家/地区,电子邮件被视为普通邮件。这意味着,如果雇主读取该文件(无论是否经过加密),并且与您是否使用他们的计算机无关,都将构成刑事犯罪。例如,在意大利,您将违反刑法第616条;在这种情况下,雇主可能会被判入狱1年(如果他们对电子邮件内容的了解损坏了主题,则可能会被判入狱3 [这很可能包括雇主解雇雇员])

–巴库留
2014年7月17日在19:33



@Bakuriu:雇主没有对电子邮件做任何事情。被检查的数据是网页(HTTPS请求),而不是电子邮件(SMTP + TLS或SMTP + SSL或SSMTP)。该电子邮件由gmail服务器处理,您所获得的只是它的Web视图。尝试应用严格的解释可能会暗示gmail(他们的计算机打开您的电子邮件并将其转换为HTML页面)。如果由于您的同意而允许gmail处理您的电子邮件,则可以肯定的是,您的雇主也已要求获得相同的同意,作为网络访问的条件。

– Ben Voigt
2014年7月17日在21:46

#2 楼

1和2由David Houde回答

3:

实际上没有任何方法可以确定在使用公司的计算机时是否正在安全地与Gmail通讯(除了检查机器直到金属)。即使他们没有更改证书,他们也可以简单地修改Web浏览器以将所有解密的流量转发到某个地方。他们还可以做一百万件事。碰巧的是,在这种情况下,他们安装了自己的根证书,使您可以查看自己的工作。

评论


即使采用这种方式,他们也可以致电其CA证书Verisign3之类的东西,您甚至不会怀疑它;-)

– Falco
2014年7月18日在20:24

究竟。因此,最终的问题是:谁将您的私人笔记本电脑卖给了您,为什么您要运行预装的Windows,其中包含谁知道呢?您在某个地方拥有信任的根源:)(谈论信任根源,有人提到过CA吗?:D)

–吕克
2014年7月19日在1:01



#3 楼

我没有看到任何人提及它,所以请允许我指出。也许我是错的,但是Google Chrome浏览器(也有Firefox插件)中实现的证书固定不能防止证书欺骗吗?

相关的问题和答案。

如果控制基础结构,当然可以嗅探某人的流量。但这在某种程度上是可能的,并且我认为这取决于受限的用户操作以及用户的知识。谷歌浏览器是可以安装在用户配置文件中的浏览器,我认为它不需要管理特权。您还可以验证安装程序包的校验和,以确认它没有被即时修改。由于Google Chrome浏览器使用证书固定,而不管操作系统证书存储是什么,它仍然容易受到MITM的攻击吗?

我看不出有什么方法可以防止用户将VirtualBox的可移植版本与具有以下功能的客户端操作系统一起使用:一堆面向隐私的工具,可以显着提高与任何网站/域之间的通信安全性。

如果上述任何内容有误,请随时纠正我。

------------

编辑。

好。因此,我找到了一种解决方案,以检查证书是否已被欺骗。它可能不适用于google和apple,但在其他域的情况下可能正是您要寻找的。

要点:

有一个站点https ://www.grc.com/fingerprints.htm可以为您检查远程证书指纹。然后,您可以将其与您在浏览器中看到的内容进行比较,以检查它们是否匹配。如果它们不匹配-则该证书被欺骗(Exception is mentioned in the section *What can go wrong with this test?* on the mentioned page.)。

这里证明它有效。浏览器证书:


grc.com的指纹验证:


我认为,既然您提到的是大规模监视方面的内容,那么证书欺骗也会出现在多个https站点上。在这种情况下,如果可以确定有人欺骗了我,那么我想您可以假设所有这些都是欺骗性的。


下一个编辑。

为了完整起见答案。由于可能是某些州或组织完全修改浏览器并且无法信任该浏览器以确认证书的有效性的情况。我找到了一个Powershell函数,该函数执行到指定地址的SSL连接并显示有关证书的一些有用信息。

这是代码(别名是我的):

function Test-WebServerSSL {
[CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
        [string]$URL,
        [Parameter(Position = 1)]
        [ValidateRange(1,65535)]
        [int]$Port = 443,
        [Parameter(Position = 2)]
        [Net.WebProxy]$Proxy,
        [Parameter(Position = 3)]
        [int]$Timeout = 15000,
        [switch]$UseUserContext
    )
Add-Type @"
using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;
namespace PKI {
    namespace Web {
        public class WebSSL {
            public Uri OriginalURi;
            public Uri ReturnedURi;
            public X509Certificate2 Certificate;
            //public X500DistinguishedName Issuer;
            //public X500DistinguishedName Subject;
            public string Issuer;
            public string Subject;
            public string[] SubjectAlternativeNames;
            public bool CertificateIsValid;
            //public X509ChainStatus[] ErrorInformation;
            public string[] ErrorInformation;
            public HttpWebResponse Response;
        }
    }
}
"@
    $ConnectString = "https://$url`:$port"
    $WebRequest = [Net.WebRequest]::Create($ConnectString)
    $WebRequest.Proxy = $Proxy
    $WebRequest.Credentials = $null
    $WebRequest.Timeout = $Timeout
    $WebRequest.AllowAutoRedirect = $true
    [Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
    try {$Response = $WebRequest.GetResponse()}
    catch {}
    if ($WebRequest.ServicePoint.Certificate -ne $null) {
        $Cert = [Security.Cryptography.X509Certificates.X509Certificate2]$WebRequest.ServicePoint.Certificate.Handle
        try {$SAN = ($Cert.Extensions | Where-Object {$_.Oid.Value -eq "2.5.29.17"}).Format(0) -split ", "}
        catch {$SAN = $null}
        $chain = New-Object Security.Cryptography.X509Certificates.X509Chain -ArgumentList (!$UseUserContext)
        [void]$chain.ChainPolicy.ApplicationPolicy.Add("1.3.6.1.5.5.7.3.1")
        $Status = $chain.Build($Cert)
        New-Object PKI.Web.WebSSL -Property @{
            OriginalUri = $ConnectString;
            ReturnedUri = $Response.ResponseUri;
            Certificate = $WebRequest.ServicePoint.Certificate;
            Issuer = $WebRequest.ServicePoint.Certificate.Issuer;
            Subject = $WebRequest.ServicePoint.Certificate.Subject;
            SubjectAlternativeNames = $SAN;
            CertificateIsValid = $Status;
            Response = $Response;
            ErrorInformation = $chain.ChainStatus | ForEach-Object {$_.Status}
        }
        $chain.Reset()
        [Net.ServicePointManager]::ServerCertificateValidationCallback = $null
    } else {
        Write-Error $Error[0]
    }
}

Set-Alias TSSL Test-WebServerSSL


您可以将其粘贴到Powershell控制台中-这将在当前会话时注册该功能(直到关闭Powershell控制台窗口,以便您不留下任何痕迹)。

之后,您可以在同一窗口中键入:

TSSL www.ipko.pl


输出将如下所示:


我在这里找到了功能代码。

评论


公司可以阻止用户安装Virtual Box的方法是,通过阻止所有软件安装或使用可接受的应用程序白名单来阻止用户安装Virtual Box。同样,可以禁用从USB引导。

–约翰尼
2014年7月18日在15:57

@Johnny Yeah。这很明显。如果您拥有对GroupPolicy的控制权,那么您将拥有管理员权限,依此类推-您可以阻止用户安装程序。您可以拒绝他们对注册表某些部分的修改访问。不过,您仍然无法阻止他们执行他们喜欢的任何程序,这就是为什么我特别声明他们可以使用Virtual Box的“便携式”版本。便携式意味着无需安装即可工作,因此不需要系统修改权限。

–mnmnc
14年7月18日在16:01

有趣。证书固定应可以检测到它。但不幸的是,我无法对其进行测试。我不能在机器上放任何未经授权的软件-甚至不是便携式版本的Google Chrome。

–Lernkurve
2014年7月18日在17:34

mnmnc,事实证明,对于通过私有锚链链接的证书没有强制固定,请参见chromium.org/Home/chromium-security/…(通过reddit)

–Ángel
2014年7月18日在21:13



我记得曾经读过,如果证书是用专门安装的根CA签名的,则有意在Chrome中固定证书不会警告,因为这是一个完全合法的用例。证书固定旨在防止CA泄露。它并非旨在阻止您故意允许MitM,因为这是用户的呼叫(在这种情况下,这是公司的计算机,因此公司可以拨打电话)。此外,由于证书存储区与浏览器一样受保护,因此钉扎对添加新的根CA的人无效,因此没有理由。

–cpast
2015年1月3日在3:44



#4 楼

正如其他人指出的那样:是的,在这种情况下是可行的。

尝试详细说明此MITM涉及的步骤:

您知道该证书028CA85E6765…属于gmail,因为CA(GeoTrust,Verisign…)声称确实存在。您的OS /浏览器包含一个CA列表,可以信任它执行正确的操作(不要撒谎,请确保它们受到适当保护...)。


您的雇主已在计算机中安装了自己的CA。
当您使用TLS连接到account.google.com时,代理会为自己颁发由该CA签署的accounts.google.com的新证书(如果尚无证书)。
您与代理的连接是使用伪造的accounts.google.com证书完成。代理会随心所欲地插入内容,然后连接到真实的accounts.google.com(使用Google的证书),并将您和gmail提供的内容相互来回发送。
当您的计算机信任代理CA时,它会认为您的雇主签发的accounts.google.com证书是合法的¹,因此为什么没有警告。

¹大多数人认为它是不合法的,因为它不是Google的证书,但这是该公司内部期望的证书。但是,员工可能不同意这一点。 :-)

评论


“证书028CA85E6765”是的,我也这么认为。麻烦的是,Google使用了数十个证书。即使大多数证书都快要到期了,为什么还要同时拥有许多证书,这对我来说还是个谜,但是他们确实如此。我认为最好的办法是比较CA的指纹。

–吕克
2014年7月19日在1:03



@Luc可能归结为不同的群集/数据中心。正如您指出的那样,对于拥有许多证书的大公司而言,正确的做法是检查CA。他们通常也有自己的中间权限(例如“ Google Internet Authority G2”)

–Ángel
14年7月19日在21:45

#5 楼

要增加其他答案,可以合理确定地确保从浏览器到Web服务器的安全连接的唯一方法是使用自己的设备。雇主拥有的设备和网络不受您的控制,因此可能很难确定其标准操作系统和应用程序中包含的内容。即使在您所在的国家/地区这是非法的,如果您担心隐私问题,也应该使用手机或笔记本电脑。