Skip to content

Commit 01c3a9f

Browse files
committed
Fix Python 3.12 support
from OpenKMIP#707
1 parent 6cd44b5 commit 01c3a9f

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

kmip/services/kmip_client.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,13 +285,17 @@ def open(self):
285285
six.reraise(*last_error)
286286

287287
def _create_socket(self, sock):
288-
self.socket = ssl.wrap_socket(
288+
context = ssl.SSLContext(self.ssl_version)
289+
context.verify_mode = self.cert_reqs
290+
if self.ca_certs:
291+
context.load_verify_locations(self.ca_certs)
292+
if self.keyfile and not self.certfile:
293+
raise ValueError("certfile must be specified")
294+
if self.certfile:
295+
context.load_cert_chain(self.certfile, self.keyfile)
296+
self.socket = context.wrap_socket(
289297
sock,
290-
keyfile=self.keyfile,
291-
certfile=self.certfile,
292-
cert_reqs=self.cert_reqs,
293-
ssl_version=self.ssl_version,
294-
ca_certs=self.ca_certs,
298+
server_side=False,
295299
do_handshake_on_connect=self.do_handshake_on_connect,
296300
suppress_ragged_eofs=self.suppress_ragged_eofs)
297301
self.socket.settimeout(self.timeout)

kmip/services/server/server.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -287,17 +287,26 @@ def interrupt_handler(trigger, frame):
287287
for cipher in auth_suite_ciphers:
288288
self._logger.debug(cipher)
289289

290-
self._socket = ssl.wrap_socket(
290+
cafile = self.config.settings.get('ca_path')
291+
context = ssl.SSLContext(self.auth_suite.protocol)
292+
context.verify_mode = ssl.CERT_REQUIRED
293+
if self.auth_suite.ciphers:
294+
context.set_ciphers(self.auth_suite.ciphers)
295+
if cafile:
296+
context.load_verify_locations(cafile)
297+
certfile = self.config.settings.get('certificate_path')
298+
299+
if certfile:
300+
keyfile = self.config.settings.get('key_path')
301+
context.load_cert_chain(certfile, keyfile=keyfile)
302+
else:
303+
raise ValueError("certfile must be specified for server-side operations")
304+
305+
self._socket = context.wrap_socket(
291306
self._socket,
292-
keyfile=self.config.settings.get('key_path'),
293-
certfile=self.config.settings.get('certificate_path'),
294307
server_side=True,
295-
cert_reqs=ssl.CERT_REQUIRED,
296-
ssl_version=self.auth_suite.protocol,
297-
ca_certs=self.config.settings.get('ca_path'),
298308
do_handshake_on_connect=False,
299-
suppress_ragged_eofs=True,
300-
ciphers=self.auth_suite.ciphers
309+
suppress_ragged_eofs=True
301310
)
302311

303312
try:

kmip/tests/unit/services/server/test_server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,9 @@ def test_start(self,
210210
# Test that in ideal cases no errors are generated and the right
211211
# log messages are.
212212
with mock.patch('socket.socket') as socket_mock:
213-
with mock.patch('ssl.wrap_socket') as ssl_mock:
213+
with mock.patch('ssl.SSLContext') as ssl_mock:
214214
socket_mock.return_value = a_mock
215-
ssl_mock.return_value = b_mock
215+
ssl_mock.return_value.wrap_socket.return_value = b_mock
216216

217217
manager_mock.assert_not_called()
218218
monitor_mock.assert_not_called()
@@ -271,7 +271,7 @@ def test_start(self,
271271

272272
# Test that a NetworkingError is generated if the socket bind fails.
273273
with mock.patch('socket.socket') as socket_mock:
274-
with mock.patch('ssl.wrap_socket') as ssl_mock:
274+
with mock.patch('ssl.SSLContext.wrap_socket') as ssl_mock:
275275
socket_mock.return_value = a_mock
276276
ssl_mock.return_value = b_mock
277277

0 commit comments

Comments
 (0)