Skip to content

Commit a824775

Browse files
committed
Add generate_ssl() to TLS client as helper. (#2120)
1 parent 482dd7c commit a824775

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

API_changes.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ API changes
33
Versions (X.Y.Z) where Z > 0 e.g. 3.0.1 do NOT have API changes!
44

55

6+
API changes 3.7.0
7+
-----------------
8+
- class method generate_ssl() added to TLS client (sync/async).
9+
10+
611
API changes 3.6.0
712
-----------------
813
- framer= is an enum: pymodbus.Framer, but still accept a framer class

pymodbus/client/tls.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,27 @@ async def connect(self) -> bool:
9191
)
9292
return await self.base_connect()
9393

94+
@classmethod
95+
def generate_ssl(
96+
cls,
97+
certfile: str | None = None,
98+
keyfile: str | None = None,
99+
password: str | None = None,
100+
) -> ssl.SSLContext:
101+
"""Generate sslctx from cert/key/password.
102+
103+
:param certfile: Cert file path for TLS server request
104+
:param keyfile: Key file path for TLS server request
105+
:param password: Password for for decrypting private key file
106+
107+
Remark:
108+
- MODBUS/TCP Security Protocol Specification demands TLSv2 at least
109+
- verify_mode is set to ssl.NONE
110+
"""
111+
return CommParams.generate_ssl(
112+
False, certfile=certfile, keyfile=keyfile, password=password
113+
)
114+
94115

95116
class ModbusTlsClient(ModbusTcpClient):
96117
"""**ModbusTlsClient**.
@@ -160,6 +181,28 @@ def __init__(
160181
)
161182
self.server_hostname = server_hostname
162183

184+
185+
@classmethod
186+
def generate_ssl(
187+
cls,
188+
certfile: str | None = None,
189+
keyfile: str | None = None,
190+
password: str | None = None,
191+
) -> ssl.SSLContext:
192+
"""Generate sslctx from cert/key/password.
193+
194+
:param certfile: Cert file path for TLS server request
195+
:param keyfile: Key file path for TLS server request
196+
:param password: Password for for decrypting private key file
197+
198+
Remark:
199+
- MODBUS/TCP Security Protocol Specification demands TLSv2 at least
200+
- verify_mode is set to ssl.NONE
201+
"""
202+
return CommParams.generate_ssl(
203+
False, certfile=certfile, keyfile=keyfile, password=password,
204+
)
205+
163206
@property
164207
def connected(self) -> bool:
165208
"""Connect internal."""

pymodbus/transport/transport.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def generate_ssl(
106106
password: str | None = None,
107107
sslctx: ssl.SSLContext | None = None,
108108
) -> ssl.SSLContext:
109-
"""Generate sslctx from cert/key/passwor.
109+
"""Generate sslctx from cert/key/password.
110110
111111
MODBUS/TCP Security Protocol Specification demands TLSv2 at least
112112
"""

0 commit comments

Comments
 (0)