我想解密 的 HTTPS 流量我的域名 在 我的服务器 与scapy。
然后我有我的域的原始国际注册证书( TLS1.3 )文件......
它必须使用 scapy 很容易做到这一点,但我在任何地方都找不到任何解决方案,这是 太疯狂了 .
例如,我尝试了这些解决方案,但它们 不工作没有错误 和 崩溃 :
最后我是写作 sample 代码 但它低于 错误 我尝试太多来修复它,但无法理解问题和明确的解决方案:
值错误:密文长度必须等于 key 大小
import os, sys
import ssl
from scapy import *
from scapy.all import *
from scapy.layers import *
from scapy.layers.tls import *
from scapy.layers import inet
from scapy.layers.inet import *
import socket, select
import binascii
import io
from io import StringIO
load_layer("tls")
c = Cert("SSL/STAR_mydomain_com.crt")
k=PrivKey("SSL/private.key")
########### Unit-Test Encrypt/Decrypt Run OK ###########
#M = bytes("message to be encrypted".encode())
#enc = c.encrypt(M, t='oaep')
#print(enc)
#dec = k.decrypt(enc, t='oaep')
#print(dec)
while True:
s = sniff(filter="port 443", count=10)
ch_list = [p for p in s]
if len(ch_list)>0:
for pkt in ch_list:
p_layer = pkt.getlayer('IP')
src = p_layer.src
dst = p_layer.dst
if (src=='my-server-ip') or (dst=='my-server-ip'):
if ('TLSEncryptedContent' in str(type(pkt['TCP'].payload))):
########### any 3 below commands go in same error ##############
########### and i was try 'pss' instead of 'oaep' but same error
dec2 = k.decrypt(pkt['TCP'].payload, t='oaep')
#dec2 = k.decrypt(bytes(pkt['TCP'].payload), t='oaep')
#dec2 = k.decrypt(bytes(pkt['TCP'].payload).decode('UTF8', 'replace'), t='oaep')
print(dec2)
else:
print('...passed')
如果您有任何解决方案,请分享,我将测试并分享结果,没有 负数 分数。注意 : 我不需要理念 ,我对此有很多引用,我知道很多开发人员说这是不可能的,并为此制定了他们的哲学逻辑。如果您有答案,请分享代码片段引用,如果没有,请留下它,因为有些小组解决了这个问题,但他们不分享他们的解决方案。坦克斯。
解决此问题但不共享其代码的示例组:
https://docs.paloaltonetworks.com/pan-os/10-1/pan-os-admin/decryption/decryption-concepts/tlsv13-ssl-decryption-support.html
那么这是可能的但谁知道代码?
最佳答案
你正在尝试做的事情是行不通的。 SSL/TLS 证书仅用于 TLS 1.3 和更低版本中的身份验证,除非您将服务器配置为仅支持 RSA key 交换,否则您的服务器将选择 Diffie Hellman。如果客户端和服务器协商使用 Diffie Hellman(这也是 TLS 1.3 的强制要求),那么即使您解决了代码中的问题,您也无法使用服务器的证书和私钥解密数据连接.
如果您要降级 TLS 的版本并将服务器配置为使用 RSA,并且浏览器愿意通过接受 RSA 的使用来发挥作用,那么理论上您想要做的事情可以完成,但您离代码还很远d 需要。您似乎只是天真地尝试使用服务器的私钥解密所有 TLS/SSL 数据包。这甚至不接近可行的方法。您需要组装流并识别 key 交换的 session key 部分并使用私钥对其进行解密,然后使用它来解密流中的其余数据。作为其中的一部分,您必须识别和跟踪不同的流(即将数据包与它们相关联)。这种方法工作量很大,坦率地说是没有意义的。
更好的方法是:
关于python - 通过 SCAPY 使用特定私钥解密 SSL/TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70790912/