我没有看到有人提到它,所以请允许我指出一些事情。也许我错了,但在谷歌浏览器中实现的证书固定(Firefox 也有一个插件)不能防止证书欺骗吗?
相关问题和答案。
当然,如果您控制基础设施,则可以嗅探某人的流量。但这在某种程度上是可能的,在我看来,这取决于用户操作的限制程度以及用户的知识。谷歌浏览器是可以安装在用户配置文件中的浏览器,我认为它不需要管理权限。您还可以验证安装包的校验和,以验证它没有被即时修改。由于谷歌浏览器使用证书固定而不考虑操作系统证书存储 -它仍然容易受到 MITM 的攻击吗?
我没有看到任何阻止用户使用带有客户端操作系统的便携式版本的 VirtualBox 的方法,这些版本将拥有大量面向隐私的工具,这些工具将显着提高保护与任何网站/域的通信的机会。
如果我在上述任何一个方面有错误,请随时纠正我。
----------
编辑。
行。所以我找到了一个检查证书是否被欺骗的解决方案。据说它不适用于谷歌和苹果,但它可能是您在其他域的情况下正在寻找的东西。
重点:
有一个站点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
输出将如下所示:
我在这里找到了一个功能代码。