python - 通过 SCAPY 使用特定私钥解密 SSL/TLS

标签 python ssl https utf-8 scapy

我想解密 的 HTTPS 流量我的域名 我的服务器 与scapy。
然后我有我的域的原始国际注册证书( TLS1.3 )文件......
必须使用 scapy 很容易做到这一点,但我在任何地方都找不到任何解决方案,这是 太疯狂了 .
例如,我尝试了这些解决方案,但它们 不工作没有错误 崩溃 :

  • scapy-ssl_tls
  • scapy-notebook2_tls
  • 鲨鱼
  • 中间人解决方案
  • SSLDUMP

  • 最后我是写作 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 部分并使用私钥对其进行解密,然后使用它来解密流中的其余数据。作为其中的一部分,您必须识别和跟踪不同的流(即将数据包与它们相关联)。这种方法工作量很大,坦率地说是没有意义的。
    更好的方法是:

  • 使用像 relayd 或 sslstrip 这样的代理,它将充当 Web 服务器剥离加密,然后在它自己和您的 Web 服务器之间转发未加密的流量(您可以查看此流量)
  • (仍然有点疯狂)修改您的网络服务器的源,以在流量被解密后将其所有流量记录在您可以获取的位置。
  • 关于python - 通过 SCAPY 使用特定私钥解密 SSL/TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70790912/

    相关文章:

    python - 调用 Python 对象时,模型中的 Django FileField 超出了最大递归深度

    python - Django - 运行测试时必须使用对象 pk 或 slug 调用通用详细信息 View

    asp.net-mvc - 强制使用 HTTP 而不是 HTTPS

    android - url中使用IP时如何分配SNI?

    ssl - 尽管加密,burp-suite 如何拦截 https 请求?

    ssl - Ring 是否请求 { :scheme :https} guarantee a HTTPS connection?

    python - 递归地将文件从子目录移动到父目录中的文件夹

    python - 在 .gitlab-ci.yml 中使用 apt-get 安装 python 包

    python - 为什么使用 ssl 认证请求返回 html?

    android - 自签名证书在发布到 chromecast 时是否有效?