fix: validate device cert chain against OCF root CA instead of VERIFY_NONE
This commit is contained in:
1 parent
c7232b3df6
commit
0fc65339b5
2 files changed
+25
-3
No files matched your search
@@ -22,6 +22,7 @@ import os
|
|||||||
import socket
|
import socket
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from OpenSSL import SSL
|
from OpenSSL import SSL
|
||||||
|
|
||||||
@@ -37,6 +38,8 @@ import logging
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
_OCF_ROOT_CA = str(Path(__file__).parent / 'ocf_root_ca.pem')
|
||||||
|
|
||||||
|
|
||||||
# Diagnostic logging — when DEBUG_BRIDGE=1 in env, the bridge dumps
|
# Diagnostic logging — when DEBUG_BRIDGE=1 in env, the bridge dumps
|
||||||
# every received CoAP frame, every /operational/state/vs/0 + /oven/vs/0
|
# every received CoAP frame, every /operational/state/vs/0 + /oven/vs/0
|
||||||
@@ -102,9 +105,13 @@ class DtlsCoapSession:
|
|||||||
"""DTLS handshake. Blocks up to HANDSHAKE_TIMEOUT_S. Raises
|
"""DTLS handshake. Blocks up to HANDSHAKE_TIMEOUT_S. Raises
|
||||||
ConnectionError / TimeoutError on failure."""
|
ConnectionError / TimeoutError on failure."""
|
||||||
ctx = SSL.Context(SSL.DTLS_METHOD)
|
ctx = SSL.Context(SSL.DTLS_METHOD)
|
||||||
ctx.set_verify(SSL.VERIFY_NONE, lambda *_: True)
|
|
||||||
# @SECLEVEL=0 — the AC14K_M-rooted chain is SHA-1 signed, which
|
ctx.load_verify_locations(_OCF_ROOT_CA)
|
||||||
# OpenSSL 3.x's default security level rejects.
|
ctx.set_verify(SSL.VERIFY_PEER, lambda conn, cert, err, depth, ok: ok)
|
||||||
|
# @SECLEVEL=0 permits SHA-1 in Samsung's server cert chain (AC14K_M
|
||||||
|
# intermediate is SHA-1 signed). This is the only channel that reaches
|
||||||
|
# the OpenSSL instance cryptography bundles — ctypes and cffi bindings
|
||||||
|
# do not expose SSL_CTX_set_security_level on this build.
|
||||||
ctx.set_cipher_list(b'ECDHE-ECDSA-AES128-GCM-SHA256:@SECLEVEL=0')
|
ctx.set_cipher_list(b'ECDHE-ECDSA-AES128-GCM-SHA256:@SECLEVEL=0')
|
||||||
ctx.use_certificate_chain_file(self.cert_path)
|
ctx.use_certificate_chain_file(self.cert_path)
|
||||||
ctx.use_privatekey_file(self.key_path)
|
ctx.use_privatekey_file(self.key_path)
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICXTCCAgGgAwIBAgIBATAMBggqhkjOPQQDAgUAMGsxKDAmBgNVBAMTH1NhbXN1
|
||||||
|
bmcgRWxlY3Ryb25pY3MgT0NGIFJvb3QgQ0ExFDASBgNVBAsTC09DRiBSb290IENB
|
||||||
|
MRwwGgYDVQQKExNTYW1zdW5nIEVsZWN0cm9uaWNzMQswCQYDVQQGEwJLUjAgFw0x
|
||||||
|
NjExMjQwMjU1MTFaGA8yMDY5MTIzMTE0NTk1OVowazEoMCYGA1UEAxMfU2Ftc3Vu
|
||||||
|
ZyBFbGVjdHJvbmljcyBPQ0YgUm9vdCBDQTEUMBIGA1UECxMLT0NGIFJvb3QgQ0Ex
|
||||||
|
HDAaBgNVBAoTE1NhbXN1bmcgRWxlY3Ryb25pY3MxCzAJBgNVBAYTAktSMFkwEwYH
|
||||||
|
KoZIzj0CAQYIKoZIzj0DAQcDQgAEYsf/Kx+sUFBQESbuytTDPwLPIe0X/8/B1L7b
|
||||||
|
3abxE9w0gQZAfI8WYUkKfNfP7HXh1M5SCnOkfwWraltGOKTeX6OBkTCBjjAOBgNV
|
||||||
|
HQ8BAf8EBAMCAcYwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL3Byb2RjYS5zYW1z
|
||||||
|
dW5naW90cy5jb20vY3JsMA8GA1UdEwEB/wQFMAMBAf8wNwYIKwYBBQUHAQEEKzAp
|
||||||
|
MCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC5zYW1zdW5naW90cy5jb20wDAYIKoZI
|
||||||
|
zj0EAwIFAANIADBFAiARY9aSE30q31q5v8B4sJczBqOp7AsD9o8ZIuNmH7IwSwIh
|
||||||
|
ALfR56jcXoFis/nDx0tQ2xTI/f0b7F6tWPqj2vyKQeNR
|
||||||
|
-----END CERTIFICATE-----
|
||||||
Reference in new issue
Block a user