From edc75ce85f74954e38a30544d541ad60b2aac1dd Mon Sep 17 00:00:00 2001 From: Weiyan Date: Wed, 7 May 2025 17:56:01 +0800 Subject: [PATCH] Put self-gen certs and write testing code for SSL --- certs/ca.crt | 20 +++++++++++++++++ certs/ca.key | 28 ++++++++++++++++++++++++ certs/ca.srl | 1 + certs/cert.crt | 20 +++++++++++++++++ certs/private.key | 28 ++++++++++++++++++++++++ mqtt_as/test_ssl_blocking.py | 42 ++++++++++++++++++++++++++++++++++++ 6 files changed, 139 insertions(+) create mode 100644 certs/ca.crt create mode 100644 certs/ca.key create mode 100644 certs/ca.srl create mode 100644 certs/cert.crt create mode 100644 certs/private.key create mode 100644 mqtt_as/test_ssl_blocking.py diff --git a/certs/ca.crt b/certs/ca.crt new file mode 100644 index 0000000..dcfbe47 --- /dev/null +++ b/certs/ca.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDRTCCAi2gAwIBAgIUc74huATqa4dGPfCYSwoW5MFTUBkwDQYJKoZIhvcNAQEL +BQAwMjEQMA4GA1UEAwwHRmFrZSBDQTERMA8GA1UECgwIRmFrZSBPcmcxCzAJBgNV +BAYTAlVTMB4XDTI1MDUwNzA5MzIzN1oXDTM1MDUwNTA5MzIzN1owMjEQMA4GA1UE +AwwHRmFrZSBDQTERMA8GA1UECgwIRmFrZSBPcmcxCzAJBgNVBAYTAlVTMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj4rjJV+W4nqjntrNILKP9sJUOylb +HuX7L4PXYIsYsSPEb9waYaidQ0oQrJdHbCPxZglg2dt+2O7xBalI3Qq4w+l8xp4O +yiaF4WlJllfz+jbWiO3STrr3qbHac+IcJUkccT2eaRAwE0qYZx/PiOoUn85ohQ8C +0wMajc7iwyir+u/YfehvIicay8C0OT1rZRrablt6Eks9DTcTHe7qjh+7mFkgO+lb +vnbADBml1VEBZohtbWIq9S6UG7dZG33kbgqOTvlFbvtptcSe2no5ZhYRXZ1VPCKF +f/YGPUhjDFsm1XOm3us6FSiUoXCARrzVTVEHjA6Yq1P9eGICfUuNDhbiGQIDAQAB +o1MwUTAdBgNVHQ4EFgQUsUIdLO2PCkZtImk/9Jr/jh0VCaIwHwYDVR0jBBgwFoAU +sUIdLO2PCkZtImk/9Jr/jh0VCaIwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQsFAAOCAQEAA95YXOSnUgXFsKtKvDWfCaGnKOw2ZzK9IGs37sbm5ixrvyPRrErZ +zg0nVJAWF6iKq+YEsvfRkRX2llSd8KLoyacxDsPWJTtwxg0+6s614L22S6j2dqrr +w5t1ZGnMHTWZXS2EUoiXZK4sKWOG6sfKHTjNa42gxpDzpCfKxRVImGg0JJBNFhDt +MO8tpAUJwUkUvOeuxqFrHoDHSBLxhw5dxbbh6/LmAvpm1YR/lh4ad8hyfNMjSwxS +/rZx1MYENK73b1fOiRIcIWkEyyzps8/BO63w3Oz9omsA2BSyIe0SgFjZ1LpAauwQ +zRJ7IfKaKp6SEsoaCxMEGmKKyIny+1a/Hw== +-----END CERTIFICATE----- diff --git a/certs/ca.key b/certs/ca.key new file mode 100644 index 0000000..e03f861 --- /dev/null +++ b/certs/ca.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPiuMlX5bieqOe +2s0gso/2wlQ7KVse5fsvg9dgixixI8Rv3BphqJ1DShCsl0dsI/FmCWDZ237Y7vEF +qUjdCrjD6XzGng7KJoXhaUmWV/P6NtaI7dJOuvepsdpz4hwlSRxxPZ5pEDATSphn +H8+I6hSfzmiFDwLTAxqNzuLDKKv679h96G8iJxrLwLQ5PWtlGtpuW3oSSz0NNxMd +7uqOH7uYWSA76Vu+dsAMGaXVUQFmiG1tYir1LpQbt1kbfeRuCo5O+UVu+2m1xJ7a +ejlmFhFdnVU8IoV/9gY9SGMMWybVc6be6zoVKJShcIBGvNVNUQeMDpirU/14YgJ9 +S40OFuIZAgMBAAECggEADpQMfb83k8jg1UFjk+6OsIEMDPYmSv0QhcLeHPADkfoP ++UxhYYm+bxcWmnDC0DjWS4aoT3f7agzabbjDra9pFHyiL4nd9qny7vHCh4JnRQJM +x5tfwJ88h/+IMDzGnwLN4LJhZEpAl7T7xX11lnIvpgtQkjL0Fno6OCzK2wdGcDXE +1rD/ipP3IGdlWLhzDMA/NBJh05T3h3+nuLKd65GeSHcXSPbkJ22ihQWAy+PKsUO5 +NYpWWY8dMl/TxP8hDpbCA3KdUhNCpVszZ8wvoAm0NA/sDQoA6pLWMvUuP7ae8jkC +L3Cka0AZ2GR3lwlqfvh8v88pdKR1RZk9Lh7lAURIAQKBgQDA6NFOLJiPF0iswg3y +LNaKlRlV0uzwBvz/N4f6E4l8jUG73DSR4bJCVmt90bAC3IT3sVsphopVoWEiSUCD +XLAnIB5CRqhAxgunKxogAodSfGYif+Egh41OgASnPNicy7C2tzXYoE19TRHsEoM9 +nx51+KtWo9q7mmm4/DkU/tbrZwKBgQC+fN2og5NnOq32OvZnyfx3rrxgU2ouZBq5 +HgEleMIszzE/ctpwFLLgrzfHWGAgMNf66qkCg1rA4dX6U/l0O4OcVDdKXJw1hzCh +anfQTakLRfri2i0qVTASl+dhKSs0xmDsI0rFTocz7Qy7wvScR+3PaRVc9bUvBMvf +X/4Kg9DWfwKBgEixcu36cCK7q28uUQMJUm82cC2fJhntCDlEO8FIy25b7IFWIZk3 +a20EE819zs3FO3X7J1cmk8pg3bGF2QGnU9nqiHyBE7YU6x87ZsTZLxUuO26UsckI +S39hTl+W1il/uD+iGnBfN9QXzsEe2MXHyDq8UhR7+ljnfx9uLDR1M5fRAoGACTGH +lSl8hL/tQ3QHDm1ONQyG5PNBramBLKwJDCDu5jC9xL0rU7t8AqISRBm80fDpi5+l +toxWZfbAWAuTf4ubx4C9Bma/10mGDFRSIgiNfxDKkgZLpb5kypDwRt0wy6RDa0Is +yqcGmXf4ZFt9aMmD7b25nTnym6lUmZxNa35/JssCgYEAmAEfD0vfj6uCg3+85SjM +ZK+QG5rXkQQfeFxHmQHV5cksGZ1VuB0+n3FXqXUF/nJ3KU+hMl48QQHFtTG1WNFD +RspWwk5yMamxeQiwbnhGfZQyaiDCML2rPYJfkcTZ9xUHeLSRz/nBLzwpFPJuCIJr +EP4VVlSswg84qlNtyiOa+Rc= +-----END PRIVATE KEY----- diff --git a/certs/ca.srl b/certs/ca.srl new file mode 100644 index 0000000..4f18a8c --- /dev/null +++ b/certs/ca.srl @@ -0,0 +1 @@ +62F951BA4B4BAF319D0C6FA555473C648805D90F diff --git a/certs/cert.crt b/certs/cert.crt new file mode 100644 index 0000000..192b9d9 --- /dev/null +++ b/certs/cert.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDNjCCAh6gAwIBAgIUYvlRuktLrzGdDG+lVUc8ZIgF2Q8wDQYJKoZIhvcNAQEL +BQAwMjEQMA4GA1UEAwwHRmFrZSBDQTERMA8GA1UECgwIRmFrZSBPcmcxCzAJBgNV +BAYTAlVTMB4XDTI1MDUwNzA5MzMyNFoXDTI2MDUwNzA5MzMyNFowNDESMBAGA1UE +AwwJbG9jYWxob3N0MREwDwYDVQQKDAhGYWtlIE9yZzELMAkGA1UEBhMCVVMwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcogwJRU/Z+wW4BsNN5UW3v0Wk +wQ0j6x+TaB0L6C5L7fK58MocBeQvxhX+5VBuEgSejg5LnXdAIL/ejOeH7nEyBJJH +Ha5gBtXZISRcXS4z/8VEVNhZtnhjb3NeXt2lP10TW19CMNWlnsvDngGCSFTI2thT +vXqFALjNRx7TKZ6kTheA20OmeHotSIDdsQ0o8da+JEBtM3BAiJlY79XRCgBxYVZT +uYGGMT2Hu1Sy2nr6eCmLI8ZjC5xFaATEfjviTQYvuf4fdvzfIF4hCPW/UezHDznu +YspwQETE07yVyCeT+1jLJ2wVqZEY6+UI2ABrmapd8ifMknhd7o2JPITEqAGHAgMB +AAGjQjBAMB0GA1UdDgQWBBRXCqgGQ+FCyFCBCQhgSdjpOcMqhDAfBgNVHSMEGDAW +gBSxQh0s7Y8KRm0iaT/0mv+OHRUJojANBgkqhkiG9w0BAQsFAAOCAQEAfxx2Yogj +nk5cDRCYPz1mukhFLk4/p5apdkm3ek+o07q3r2VnCx/lz5KnVBn0bKCThMSGCmeU +MEwd3BWrYwwRcGH4uvIZ+ux4ZzMnDDRbNT49iWEaJew7mP/xuucybAmNOk+mL14T +6Wip4tJ//iLKbqh4YDrmsD10EJJj+Z+vnjMifaurNmmccCqiI0cjRmbzazTssv7D ++PFwgsXSjN8Ae3ED9mm2XC8oC5Emso3tixfKT4tRxIRoJPPAx6BjwqNDuxRf4aNm +s9E8xM7yDkRFmgITYI20AWfeYj9pA9AatV3Cy58zOPkqBtOlWsdf/sB5iSiH3fmC +lwaXogu7pCZQ2Q== +-----END CERTIFICATE----- diff --git a/certs/private.key b/certs/private.key new file mode 100644 index 0000000..cbe7f4f --- /dev/null +++ b/certs/private.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcogwJRU/Z+wW4 +BsNN5UW3v0WkwQ0j6x+TaB0L6C5L7fK58MocBeQvxhX+5VBuEgSejg5LnXdAIL/e +jOeH7nEyBJJHHa5gBtXZISRcXS4z/8VEVNhZtnhjb3NeXt2lP10TW19CMNWlnsvD +ngGCSFTI2thTvXqFALjNRx7TKZ6kTheA20OmeHotSIDdsQ0o8da+JEBtM3BAiJlY +79XRCgBxYVZTuYGGMT2Hu1Sy2nr6eCmLI8ZjC5xFaATEfjviTQYvuf4fdvzfIF4h +CPW/UezHDznuYspwQETE07yVyCeT+1jLJ2wVqZEY6+UI2ABrmapd8ifMknhd7o2J +PITEqAGHAgMBAAECggEAFUET+woRvNWIQCGCzQYogLeOvr2Hh/E21qzRDDWUWq9O +OZcIBedywFzTzUPWtyjwwYcrP219qhEHmC5smJBtgckHBGltqRAkYpNRuMrYIyw4 +233b4ciV64BLGmorD2paue6zLWstAo1avw+oysH/50VzB2H1xyiC6zAUabkDEu5j +be8m6hddBF3iEl3TsWkatc8SxgL89uod1ZinykznDxveoFJ0nmFMFEEIV02Ky+U2 +At2jqT/xHnljgmZiffiNhvpy0Jn0yOksxt18TpBoxwMCsU/cV+paAxzxUJzHHj+Z +9NTie36d1x/WOlCgnmU8cdgc/coKM634cJCriJ2NKQKBgQDSoyJGzAnbbHdHRfVF +Z0gv+IDhoJYxcG6ggcGkfS6nqsR+obfSzBTqMeFvTiGuO7B3dkJHZUUwiPC6VqQ4 +VSeI7N6ifmPDOvg3TL7caQHEnRw52ZiHbUvG5q74iUZhB/a+NKsGaup35hJHjvO/ ++TY5MxAe7ni3PjpiCY3YW2yZlQKBgQC+XYwr03yMvZE4NCnNIf0hHjE23qQ9wCa7 +VOgWAqEv9LsiP1FsYN/U3A0tQ57cMOtHVpxkkX2x71iiJfINygdr8fAtOT+ESfgk +/FpbxoDEjMBQwtGGo05AKhzsa6xNH7sE6dP1CuQjIzMLlLI47s8FwxdEFahzQ5Ep +cIIx+Rr/qwKBgQCgtr/sbLoIpZXM19/weIFnuJ/9h12Rk0uVQ+vP6YOzgmQyiomL +WROMLUrodiDUo85dF+oyN163TYT/aCQcpzxnCPRF31GXIGNLLk9iNOyYa5ehvBjZ +G9d5h4FxOKxuVHk7X0wutVz45p6D4tqwWyG4OvHN5/5LMjuxmcCUmA0gkQKBgF2r +umV2UzsNrH9za34800mQibbuJvMbsfNL/EeYU6g9TDe14GLr6Dfdb75uH6VJjPw1 +ag8yaB8+HubqtQiD+NLs4bnfCZoWq7vHUM8IBiSw/ZC/zEnr4X1BO6o58Tah/myU +gm95RHjlwSBZsrjBCa1UKgaegZz2Cl/RtL7STK6xAoGAW2fTXcaXZJlTrxQ5yX7H +nDsLTT+IeFEOhsj5R22JVtrEmZFPn5ay/mS5dfOfthuTaz0mmWw12BOQTsjkmNbH +hFLoYRZvy93VnQiWWbVW/k31MO2iHhh1D3czyDbw561ean+gpUypm/MB2UcXYvIJ +3S7wsFTBhYVzrtok9/F9AfQ= +-----END PRIVATE KEY----- diff --git a/mqtt_as/test_ssl_blocking.py b/mqtt_as/test_ssl_blocking.py new file mode 100644 index 0000000..4009bb1 --- /dev/null +++ b/mqtt_as/test_ssl_blocking.py @@ -0,0 +1,42 @@ +import asyncio +from mqtt_as import MQTTClient, config +import time + +_WIFI_SSID = "WIFI_SSID" +_WIFI_PW = "WIFI_PW" + +async def another_task(): + while True: + print("Performing another task. tick_ms: ", time.ticks_ms()) + await asyncio.sleep(3) + +async def main(): + with open("/remote/certs/ca.crt", 'r') as f: + ca = f.read() + + config["server"] = "youtube.com" + config["ssl"] = True + config['ssid'] = _WIFI_SSID + config['wifi_pw'] = _WIFI_PW + config['ssl_params'] = { + 'key': "/remote/certs/private.key" , + 'cert': "/remote/certs/cert.crt", + 'cadata': ca, + 'server_hostname': config['server'], + 'do_handshake': False, + } + + client = MQTTClient(config) + + + asyncio.create_task(another_task()) + t0 = time.ticks_ms() + print(f"Connecting to MQTT broker, Current ticks_ms: {t0}") + try: + await client.connect() + finally: + t1 = time.ticks_ms() + print(f"Connect() finished/aborted. Current ticks_ms: {t1} Time taken: {time.ticks_diff(t1, t0)} ms") + +if __name__ == "__main__": + asyncio.run(main())