@@ -47,6 +47,7 @@ void WebSocketsClient::begin(const char *host, uint16_t port, const char * url)
47
47
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
48
48
_client.isSSL = false ;
49
49
_client.ssl = NULL ;
50
+ _client.fingerprint = NULL ;
50
51
#endif
51
52
_client.cUrl = url;
52
53
_client.cCode = 0 ;
@@ -79,6 +80,17 @@ void WebSocketsClient::beginSSL(const char *host, uint16_t port, const char * ur
79
80
void WebSocketsClient::beginSSL (String host, uint16_t port, String url) {
80
81
beginSSL (host.c_str (), port, url.c_str ());
81
82
}
83
+
84
+ void WebSocketsClient::beginSSL (const char *host, uint16_t port, const char * url, const char * fingerprint) {
85
+ begin (host, port, url);
86
+ _client.isSSL = true ;
87
+ _client.fingerprint = fingerprint;
88
+ }
89
+
90
+ void WebSocketsClient::beginSSL (String host, uint16_t port, String url, const char * fingerprint) {
91
+ beginSSL (host.c_str (), port, url.c_str ());
92
+ _client.fingerprint = fingerprint;
93
+ }
82
94
#endif
83
95
84
96
/* *
@@ -124,6 +136,14 @@ void WebSocketsClient::loop(void) {
124
136
125
137
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
126
138
_client.tcp ->setNoDelay (true );
139
+
140
+ if (_client.isSSL && _client.fingerprint != NULL ) {
141
+ if (!(((WiFiClientSecure*)_client.tcp )->verify (_client.fingerprint , _host.c_str ()))) {
142
+ DEBUG_WEBSOCKETS (" [WS-Client] certificate mismatch\n " );
143
+ WebSockets::clientDisconnect (&_client, 1000 );
144
+ return ;
145
+ }
146
+ }
127
147
#endif
128
148
129
149
// send Header to Server
0 commit comments