更新时间:2026-06-26 GMT+08:00
分享

加密解析失败

故障现象

旁路TLS流量未成功解析

可能原因

  • 上传数据库服务器的SSL私钥错误。
  • 私钥算法与格式错误。
  • 协议与套件配置错误。
  • 未捕获到连接建立时的完整双向握手流量。

解决办法

先排除常规非解密解析失败的问题,如数据库配置错误、Agent配置错误、网络不通、安全组未放通、端口未放通等问题。

确认其他配置正确后,请逐项排查以下约束:

  1. 请上传数据库服务器的SSL私钥,而非证书文件。
  2. 私钥算法与格式:必须为RSA算法、PEM格式且无密码;不支持ECC/ECDSA证书,且需确保私钥与数据库当前证书严格匹配。

    可用openssl x509 -noout -modulus -in server.crt | openssl md5与openssl rsa -noout -modulus -in server.key | openssl md5比对模数哈希,应相等。

    正确格式参考:

    -----BEGIN RSA PRIVATE KEY-----
    ...
    -----END RSA PRIVATE KEY-----

    错误格式参考:有密码加密密钥

    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-256-CBC,...
    ...
    -----END RSA PRIVATE KEY-----

    其他错误类型:

    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
  3. 协议与套件配置:必须禁用TLS 1.3及ECDHE/DHE类套件(前向保密),仅允许配置TLS_RSA_*系列(如AES128-SHA),否则静态私钥无法推导会话密钥。
  4. 如PostgreSQL的postgresql.conf中ssl = on,且ssl_min_protocol_version = 'TLSv1'、ssl_max_protocol_version = 'TLSv1.2'(禁用TLS 1.3),ssl_ciphers必须仅包含静态RSA密钥交换套件,推荐如指定算法ssl_ciphers = 'AES256-SHA',或多种指定算法ssl_ciphers = 'AES256-SHA:AES128-SHA:AES128-SHA256:AES256-SHA256'(不能包含ECDHE/DHE算法)。

    不推荐GCM或RC4算法:RC4属于同步流密码,一旦流量发生丢包或字节缺失后续皆不能成功解析;GCM在旁路环境下的TCP重传包、空报文等极易导致解析器的计数器出现偏差,出现偏差后续流量不能被成功解析。

    参考配置文件如postgresql.conf部分配置:

    # 开启 SSL
    ssl = on
    # 1. 指定加密套件
    ssl_ciphers = 'AES256-SHA:AES128-SHA:AES128-SHA256:AES256-SHA256'
    # 2. 指定协议版本范围
    ssl_min_protocol_version = 'TLSv1'
    ssl_max_protocol_version = 'TLSv1.2'
    # 3. 指定证书和私钥 (确保权限 600)
    ssl_cert_file = 'server.crt'
    ssl_key_file = 'server.key'
    ssl_ca_file = 'cacert.pem'
  5. 握手流量捕获:解密依赖握手包中的Client Key Exchange,必须捕获到连接建立时的完整双向握手流量;若连接在抓包前、上传密钥前已建立或握手包丢失,将无法解密。

相关文档