Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 是否可以截获明文形式的安全请求的有效负载?_Security_Ssl_Encryption_Https_Request - Fatal编程技术网

Security 是否可以截获明文形式的安全请求的有效负载?

Security 是否可以截获明文形式的安全请求的有效负载?,security,ssl,encryption,https,request,Security,Ssl,Encryption,Https,Request,考虑我们运行以下请求: url="https://secretsub.example.com/secretpath/post.php" payload = {'secretmessage1' : 'foo','secretmessage2' : 'bar'} r = requests.post(url,data=payload,verify=True) 该语言(python)是任意的,但它可以是任何其他语言(NodeJs、Java、Php……)上的请求 请注意,url使用的是https,这意

考虑我们运行以下请求:

url="https://secretsub.example.com/secretpath/post.php" 
payload = {'secretmessage1' : 'foo','secretmessage2' : 'bar'}
r = requests.post(url,data=payload,verify=True)
该语言(python)是任意的,但它可以是任何其他语言(NodeJs、Java、Php……)上的请求

请注意,url使用的是https,这意味着连接是通过SSL进行安全保护的。假设我将这个程序编译成二进制(.exe),计算机是否可以通过纯文本软件读取有效载荷

我知道数据包嗅探软件(如WireShark)只会以纯文本形式显示域名(example.com),而不会显示加密的密码或有效负载


但是,如果我在web浏览器中运行此代码(假设它是用Javascript编写的),我将能够在浏览器控制台中以纯文本形式访问有效负载和secretpath。我假设浏览器只有在请求登录到其控制台后才对其进行加密。但是,如果此代码在浏览器之外运行,计算机主机是否有办法以纯文本形式截取这些数据?(某些类型的数据包嗅探工具)

只能看到域名,有效负载和路径是加密的,并且只能通过客户端和Web服务器之间协商的会话密钥解密。但是你电脑上的恶意软件可以访问它,例如,通过访问应用程序使用的内存,或使用带有某种后门的不安全编程库。

https所做的是启动证书交换,以便您的客户端将从服务器接收证书,该证书验证服务器所说的服务器,并允许客户端进行加密数据通过通道(网络)传输

第一位——验证服务器是他们声称的那个人——依赖于一个称为证书链的东西。您收到的证书将使用发卡机构的私钥进行签名。您的客户应使用您应该“已经拥有”的发卡机构公钥检查此证书

大多数操作系统都有一个受信任的根证书列表。在windows中,您可以在证书管理器中看到它们

在不了解python的情况下,@Patrick Mevzek提示您可以发布根CA(证书颁发机构)或使用操作系统CA。如果你正在使用OS one,你可能需要检查它是否会在那里

我希望所有这些都是自动的——它是您指定的协议的一部分,即https。但是,您可能需要与python人员确认这一点

大多数人都忽略了这一点,但这是非常重要的。如果您不验证证书,则可能会受到“中间人”攻击或DNS欺骗

基本上,我可以使用桌面上的两个工具为secretsub.example.com颁发证书。它不会由有效的CA签名,但如果您不检查它,那么我可以将该证书放置在代理中(中间的人)-当您重新请求时,我的代理将从真正的服务器获得真正的证书,建立HTTP连接,但将我的证书颁发给您的应用程序。然后,您将使用我的证书加密到我的代理,这样我就可以读取您的数据,然后将其转发到真正的服务器-您永远不会知道!(许多公司代理人正是这样对待他们的员工的)

或者,如果我可以更改您的DNS以将IP指向我的服务器,我也可以做几乎相同的事情—充当代理

完成后,数据将通过网络进行加密

所以-是的HTTPS将加密网络上的帐户-但检查证书是否有效

显然,正如有人指出的那样——数据在客户端计算机上是透明的——就像它现在在浏览器中一样


Stuart

几乎总是可以在建立连接的设备上看到SSL连接的明文。有时会有一些日志选项来简化操作,有时则需要根据平台做一些更复杂或更痛苦的事情。这是通过隐蔽性实现的安全性。工具能够从您的
.exe
中提取字符串,并将恢复URL和有效负载,并且能够重新执行相同的查询。此外,主机上还可能有一个强制性的HTTPS代理(与AV软件一样),可以读取所有纯文本。这取决于您的软件附带了特定的CA列表(您正在执行
verify=True
这很好!)还是使用了来自底层操作系统的CA。关于不执行正确的证书验证,这是一篇规范性的论文,应该会让许多开发人员和库开发人员大开眼界:对于Python和CAs来说(但在任何其他语言中都是一样的,因此这实际上取决于您使用什么“SSL”库以及如何使用它),请参见:如果您需要验证连接证书的另一端,则需要提供“CA证书”文件,填充您愿意信任的每个颁发者的证书链。[..]平台的证书文件可以通过调用SSLContext.load\u default\u certs(),[…]来使用