传输方式

TLS

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

TCP 传输,其上叠加一层 TLS,通过证书进行身份认证。驱动发送的所有内容在传输过程中都会被加密;其上层协议的任何部分都不会改变,因此任何支持 tcp 并声明 tls 的驱动,只需修改传输代码即可完成切换。

传输语法

{IP address or hostname}[:{port}]
端口不会自动切换为安全默认值。纯文本默认端口为 502 的协议,在这里仍然默认使用 502——如果设备监听在其他端口,请显式指定 TLS 端口。

示例

modbus-tcp:tls://192.168.1.100:802?tls.trust-store=/etc/plc4x/truststore.p12&tls.trust-store-password=secret

名称
类型
默认值
是否必填
描述

名称
TLS
代码

tls

Maven 依赖

<dependency>
  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4j-transports-tls</artifactId>
  <version>1.0.0</version>
</dependency>

配置选项:

tls.verify

BOOLEAN

true

tls.ignore-common-name

BOOLEAN

false

接受为与所连接主机不同的其他主机签发的服务器证书

tls.trust-store

STRING

要信任的证书密钥库(Key Store),用于替代 JVM 的公共受信证书颁发机构。

tls.trust-store-password

STRING

由 tls.trust-store 指定的信任库(trust store)的密码

tls.trust-store-type

STRING

PKCS12

由 tls.trust-store 指定的信任库类型

tls.version

STRING

TLS 协议版本(例如 'TLSv1.2'、'TLSv1.3')。若未设置,则使用 TLS 1.3,并回退至 TLS 1.2。

tls.keystore

STRING

包含用于双向 TLS 的客户端证书和私钥的密钥库(PKCS12/JKS)路径。

tls.keystore-password

STRING

客户端密钥库的密码。

tls.keystore-type

STRING

密钥库类型(例如 'PKCS12'、'JKS')。默认为 PKCS12。

tls.log-session-keys

BOOLEAN

false

以 SSLKEYLOGFILE 格式将 TLS 会话密钥记录到审计日志中,供 Wireshark 进行解密。

tls.connect-timeout-ms

INT

5000

连接超时时间,单位为毫秒。

tls.read-timeout-ms

INT

0

以毫秒为单位的 Socket 读取超时时间。0 表示不超时。

tls.write-timeout-ms

INT

0

以毫秒为单位的套接字写入超时时间。0 表示不超时。

tls.no-delay

BOOLEAN

true

启用 TCP_NODELAY(禁用 Nagle 算法)。

tls.keep-alive

BOOLEAN

false

启用 SO_KEEPALIVE。

tls.send-buffer-size

INT

81920

发送缓冲区大小(字节)。0 表示使用系统默认值。

tls.receive-buffer-size

INT

81920

以字节为单位的接收缓冲区大小。0 表示使用系统默认值。

tls.local-address

STRING

要绑定的本地地址(可选)。若未设置,则使用默认值。

tls.local-port

INT

0

要绑定的本地端口(可选)。0 表示使用临时端口。

TLS 特有选项下方的套接字选项继承自 TCP 传输。

证书

默认情况下使用 JVM 自带的公开证书颁发机构列表,而这很少是工厂网络所希望的。将 tls.trust-store 指向一个包含你愿意信任的证书的密钥库;当设备要求客户端也进行身份验证时(双向 TLS),将 tls.keystore 指向你自己的证书和私钥。

tls.verify=false 会让 TLS 退化为只有加密而没有身份验证——它能防止窃听,却挡不住能够重定向你流量的攻击者。tls.ignore-common-name=true 是针对常见情况的更窄的逃生通道:设备的证书是为某个名称签发的,但它已不再能通过该名称被访问。这两者都是为了把产线拉起来;两者都不该出现在运行中的工厂里。

评论

登录后参与评论

正在加载评论…