You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.4.2 DataSnap TCP/IP加密连接与认证相关疑问

Delphi 10.4.2 DataSnap TCP/IP加密连接与认证相关疑问

我明白你在测试DataSnap纯TCP/IP模式下的传输加密时的困惑,咱们一步步来拆解你的三个问题:

第一个问题:密钥不匹配却能连接?

按常理来说,当服务器配置了对称加密过滤器(比如你用的PC1对应过滤器),且客户端提供的密钥不匹配时,连接应该直接失败才对。但你遇到了相反的情况,大概率是配置环节有遗漏:

  • 首先确认服务器端的过滤器是否真正启用:检查TDSTCPServerTransport组件的Filters列表里,你添加的PC1过滤器的Enabled属性是否设为True,如果没启用,加密根本不会生效。
  • 其次检查客户端的参数格式:你写的SQLConnection.Params.Add('Filters={"PC1": {"Key": "test"}}');用了HTML转义的引号,如果你是在Delphi代码里直接写这段,应该换成普通的引号转义,比如:
    SQLConnection.Params.Add('Filters={"PC1": {"Key": "test"}}');
    
    要是在设计时的参数编辑器里添加,才需要用"转义引号,格式错误也会导致过滤器不生效。
  • 最后确认服务器端的过滤器配置是否正确:比如你在服务器上设置的密钥是不是和客户端的test完全一致?如果服务器密钥不是test,但连接还能成功,那说明加密过滤器根本没在工作。

第二个问题:RSA过滤器的工作逻辑

DataSnap的RSA加密过滤器不需要你手动输入密钥对,它是自动完成密钥交换的,流程大概是这样:

  • 服务器启动时,会自动生成一对RSA公钥和私钥;
  • 客户端发起连接请求后,服务器会把自己的公钥发送给客户端;
  • 客户端收到公钥后,随机生成一个临时的对称加密密钥,用服务器的公钥加密后发送回服务器;
  • 服务器用自己的私钥解密得到这个对称密钥,之后双方就用这个临时对称密钥来加密所有后续的通信数据。
    你只需要在服务器和客户端的对应Transport组件里添加RSA过滤器并启用,它就会自动完成上述过程,不用手动配置任何密钥,比固定密钥的对称加密更安全。

第三个问题:Authentication Manager的账号密码是否明文传输?

这完全取决于你是否启用了有效的传输加密过滤器:

  • 如果你已经正确启用了PC1(或RSA)加密过滤器,那么整个TCP连接的所有数据都会被加密,包括Authentication Manager发送的用户名和密码,不会以明文形式在网络上传输;
  • 但如果加密过滤器没有生效(比如配置错误或未启用),那账号密码确实会以明文形式发送,这是非常危险的,一定要确保加密过滤器正常工作后再启用认证功能。

备注:内容来源于stack exchange,提问作者user1937012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:14:33