8000 Implements SSL connection (#20) · fgervais/lib-python@62fb5ee · GitHub
[go: up one dir, main page]

Skip to content

Commit 62fb5ee

Browse files
SmankusorsantohaUa
authored andcommitted
Implements SSL connection (blynkkk#20)
Added new feature "SSL socket connection"
1 parent 9c056f7 commit 62fb5ee

File tree

4 files changed

+51
-5
lines changed

4 files changed

+51
-5
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,15 @@ blynk = blynklib.Blynk(BLYNK_AUTH)
115115

116116
# advanced options of lib init
117117
# from __future__ import print_function
118-
# blynk = blynklib.Blynk(BLYNK_AUTH, server='blynk-cloud.com', port=80, heartbeat=10, rcv_buffer=1024, log=print)
118+
# blynk = blynklib.Blynk(BLYNK_AUTH, server='blynk-cloud.com', port=80, ssl=False, heartbeat=10, rcv_buffer=1024, log=print)
119+
120+
# Lib init with hardware SSL connection example
121+
# blynk = blynklib.Blynk(BLYNK_AUTH, port=443, ssl_cert='default')
122+
# the ssl_cert='default' is for default blynk server (blynk-cloud.com) or self hosted server with Let's Encrypt certificate.
123+
124+
# if you have self hosted server with your own self signed certificate, then you can change ssl_cert with your
125+
# own CA file. For example if you have CA file in /home/blynk/ca.crt, then the param will be
126+
# blynk = blynklib.Blynk(BLYNK_AUTH, port=443, ssl_mode='/home/blynk/ca.crt')
119127

120128
# register handler for Virtual Pin V22 reading by Blynk App.
121129
# when a widget in Blynk App asks Virtual Pin data from server within given configurable interval (1,2,5,10 sec etc)

blynklib.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class Protocol(object):
6767
STATUS_OK = const(200)
6868
VPIN_MAX_NUM = const(32)
6969

70-
_msg_id = 1
70+
_msg_id = 0
7171

7272
def _get_msg_id(self, **kwargs):
7373
if 'msg_id' in kwargs:
@@ -381,4 +381,4 @@ def run(self):
381381
self.log(b_err)
382382
self.disconnect()
383383
except Exception as g_exc:
384-
self.log(g_exc)
384+
self.log(g_exc)

blynklib_cp.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44

55
__version__ = '0.2.5'
66

7+
import os
78
import socket
8-
import time
9+
import ssl
910
import struct
11+
import time
1012

1113
LOGO = """
1214
___ __ __
@@ -127,6 +129,7 @@ def internal_msg(self, *args):
127129
class Connection(Protocol):
128130
SOCK_MAX_TIMEOUT = 5
129131
SOCK_TIMEOUT = 0.05
132+
SOCK_SSL_TIMEOUT = 1
130133
EAGAIN = 11
131134
ETIMEDOUT = 60
132135
RETRIES_TX_DELAY = 2
@@ -144,13 +147,14 @@ class Connection(Protocol):
144147
_last_ping_time = 0
145148
_last_send_time = 0
146149

147-
def __init__(self, token, server='blynk-cloud.com', port=80, heartbeat=10, rcv_buffer=1024, log=stub_log):
150+
def __init__(self, token, server='blynk-cloud.com', port=80, ssl_cert=None, heartbeat=10, rcv_buffer=1024, log=stub_log):
148151
self.token = token
149152
self.server = server
150153
self.port = port
151154
self.heartbeat = heartbeat
152155
self.rcv_buffer = rcv_buffer
153156
self.log = log
157+
self.ssl_cert = ssl_cert
154158

155159
def send(self, data):
156160
retries = self.RETRIES_TX_MAX_NUM
@@ -197,6 +201,17 @@ def _get_socket(self):
197201
self._socket = socket.socket()
198202
self._socket.connect(socket.getaddrinfo(self.server, self.port)[0][4])
199203
self._socket.settimeout(self.SOCK_TIMEOUT)
204+
if self.ssl_cert:
205+
self.log('Using SSL socket...')
206+
if (self.ssl_cert == "default" 8000 ;):
207+
sslContext = ssl.create_default_context()
208+
caFile = os.path.dirname(__file__) + "/certificate/_blynk-cloudcom.crt"
209+
sslContext.load_verify_locations(cafile=caFile)
210+
else:
211+
sslContext = ssl.create_default_context(cafile=self.ssl_cert)
212+
sslContext.verify_mode = ssl.CERT_REQUIRED
213+
self._socket.settimeout(self.SOCK_SSL_TIMEOUT)
214+
self._socket = sslContext.wrap_socket(sock=self._socket, server_hostname=self.server)
200215
self.log('Connected to blynk server')
201216
except Exception as g_exc:
202217
raise BlynkError('Connection with the Blynk server failed: {}'.format(g_exc))

certificate/_blynk-cloudcom.crt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIID5TCCAs2gAwIBAgIJAIHSnb+cv4ECMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
3+
VQQGEwJVQTENMAsGA1UECAwES3lpdjENMAsGA1UEBwwES3lpdjELMAkGA1UECgwC
4+
SVQxEzARBgNVBAsMCkJseW5rIEluYy4xGDAWBgNVBAMMD2JseW5rLWNsb3VkLmNv
5+
bTEfMB0GCSqGSIb3DQEJARYQZG1pdHJpeUBibHluay5jYzAeFw0xNjAzMTcxMTU4
6+
MDdaFw0yMTAzMTYxMTU4MDdaMIGIMQswCQYDVQQGEwJVQTENMAsGA1UECAwES3lp
7+
djENMAsGA1UEBwwES3lpdjELMAkGA1UECgwCSVQxEzARBgNVBAsMCkJseW5rIElu
8+
Yy4xGDAWBgNVBAMMD2JseW5rLWNsb3VkLmNvbTEfMB0GCSqGSIb3DQEJARYQZG1p
9+
dHJpeUBibHluay5jYzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALso
10+
bhbXQuNlzYBFa9h9pd69n43yrGTL4Ba6k5Q1zDwY9HQbMdfC5ZfnCkqT7Zf+R5MO
11+
RW0Q9nLsFNLJkwKnluRCYGyUES8NAmDLQBbZoVc8mv9K3mIgAQvGyY2LmKak5GSI
12+
V0PC3x+iN03xU2774+Zi7DaQd7vTl/9RGk8McyHe/s5Ikbe14bzWcY9ZV4PKgCck
13+
p1chbmLhSfGbT3v64sL8ZbIppQk57/JgsZMrVpjExvxQPZuJfWbtoypPfpYO+O8l
14+
1szaMlTEPIZVMoYi9uE+DnOlhzJFn6Ac4FMrDzJXzMmCweSX3IxguvXALeKhUHQJ
15+
+VP3G6Q3pkZRVKz+5XsCAwEAAaNQME4wHQYDVR0OBBYEFJtqtI62Io66cZgiTR5L
16+
A5Tl5m+xMB8GA1UdIwQYMBaAFJtqtI62Io66cZgiTR5LA5Tl5m+xMAwGA1UdEwQF
17+
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAKphjtEOGs7oC3S87+AUgIw4gFNOuv+L
18+
C98/l47OD6WtsqJKvCZ1lmKxY5aIro9FBPk8ktCOsbwEjE+nyr5wul+6CLFr+rnv
19+
7OHYGwLpjoz+rZgYJiQ61E1m0AZ4y9Fyd+D90HW6247vrBXyEiUXOhN/oDDVfDQA
20+
eqmNBx1OqWel81D3tA7zPMA7vUItyWcFIXNjOCP+POy7TMxZuhuPMh5bVu+/cthl
21+
/Q9u/Z2lKl4CWV0Ivt2BtlN6iefva0e2AP/As+gfwjxrb0t11zSILLNJ+nxRIwg+
22+
k4MGb1zihKbIXUzsjslONK4FY5rlQUSwKJgEAVF0ClxB4g6dECm0ckc=
23+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)
0