Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
arduino-esp32
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
arduino-esp32
Commits
ef99cd7f
Unverified
Commit
ef99cd7f
authored
Dec 21, 2020
by
Me No Dev
Committed by
GitHub
Dec 21, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add WiFiClientSecure::setInsecure() to equalize API with ESP8266 (#4648)
parent
b05bdf69
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
106 additions
and
22 deletions
+106
-22
libraries/HTTPClient/src/HTTPClient.cpp
libraries/HTTPClient/src/HTTPClient.cpp
+9
-5
libraries/WiFiClientSecure/examples/WiFiClientInsecure/WiFiClientInsecure.ino
...Secure/examples/WiFiClientInsecure/WiFiClientInsecure.ino
+61
-0
libraries/WiFiClientSecure/src/WiFiClientSecure.cpp
libraries/WiFiClientSecure/src/WiFiClientSecure.cpp
+17
-6
libraries/WiFiClientSecure/src/WiFiClientSecure.h
libraries/WiFiClientSecure/src/WiFiClientSecure.h
+2
-0
libraries/WiFiClientSecure/src/ssl_client.cpp
libraries/WiFiClientSecure/src/ssl_client.cpp
+16
-10
libraries/WiFiClientSecure/src/ssl_client.h
libraries/WiFiClientSecure/src/ssl_client.h
+1
-1
No files found.
libraries/HTTPClient/src/HTTPClient.cpp
View file @
ef99cd7f
...
...
@@ -73,11 +73,15 @@ public:
bool
verify
(
WiFiClient
&
client
,
const
char
*
host
)
override
{
WiFiClientSecure
&
wcs
=
static_cast
<
WiFiClientSecure
&>
(
client
);
wcs
.
setCACert
(
_cacert
);
wcs
.
setCertificate
(
_clicert
);
wcs
.
setPrivateKey
(
_clikey
);
return
true
;
WiFiClientSecure
&
wcs
=
static_cast
<
WiFiClientSecure
&>
(
client
);
if
(
_cacert
==
nullptr
)
{
wcs
.
setInsecure
();
}
else
{
wcs
.
setCACert
(
_cacert
);
wcs
.
setCertificate
(
_clicert
);
wcs
.
setPrivateKey
(
_clikey
);
}
return
true
;
}
protected:
...
...
libraries/WiFiClientSecure/examples/WiFiClientInsecure/WiFiClientInsecure.ino
0 → 100644
View file @
ef99cd7f
#include <WiFiClientSecure.h>
const
char
*
ssid
=
"your-ssid"
;
// your network SSID (name of wifi network)
const
char
*
password
=
"your-password"
;
// your network password
const
char
*
server
=
"www.howsmyssl.com"
;
// Server URL
WiFiClientSecure
client
;
void
setup
()
{
//Initialize serial and wait for port to open:
Serial
.
begin
(
115200
);
delay
(
100
);
Serial
.
print
(
"Attempting to connect to SSID: "
);
Serial
.
println
(
ssid
);
WiFi
.
begin
(
ssid
,
password
);
// attempt to connect to Wifi network:
while
(
WiFi
.
status
()
!=
WL_CONNECTED
)
{
Serial
.
print
(
"."
);
// wait 1 second for re-trying
delay
(
1000
);
}
Serial
.
print
(
"Connected to "
);
Serial
.
println
(
ssid
);
Serial
.
println
(
"
\n
Starting connection to server..."
);
client
.
setInsecure
();
//skip verification
if
(
!
client
.
connect
(
server
,
443
))
Serial
.
println
(
"Connection failed!"
);
else
{
Serial
.
println
(
"Connected to server!"
);
// Make a HTTP request:
client
.
println
(
"GET https://www.howsmyssl.com/a/check HTTP/1.0"
);
client
.
println
(
"Host: www.howsmyssl.com"
);
client
.
println
(
"Connection: close"
);
client
.
println
();
while
(
client
.
connected
())
{
String
line
=
client
.
readStringUntil
(
'\n'
);
if
(
line
==
"
\r
"
)
{
Serial
.
println
(
"headers received"
);
break
;
}
}
// if there are incoming bytes available
// from the server, read them and print them:
while
(
client
.
available
())
{
char
c
=
client
.
read
();
Serial
.
write
(
c
);
}
client
.
stop
();
}
}
void
loop
()
{
// do nothing
}
libraries/WiFiClientSecure/src/WiFiClientSecure.cpp
View file @
ef99cd7f
...
...
@@ -36,6 +36,7 @@ WiFiClientSecure::WiFiClientSecure()
ssl_init
(
sslclient
);
sslclient
->
socket
=
-
1
;
sslclient
->
handshake_timeout
=
120000
;
_use_insecure
=
false
;
_CA_cert
=
NULL
;
_cert
=
NULL
;
_private_key
=
NULL
;
...
...
@@ -116,17 +117,17 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, int32_t timeout){
return
connect
(
host
,
port
);
}
int
WiFiClientSecure
::
connect
(
IPAddress
ip
,
uint16_t
port
,
const
char
*
_CA_cert
,
const
char
*
_cert
,
const
char
*
_
private_key
)
int
WiFiClientSecure
::
connect
(
IPAddress
ip
,
uint16_t
port
,
const
char
*
CA_cert
,
const
char
*
cert
,
const
char
*
private_key
)
{
return
connect
(
ip
.
toString
().
c_str
(),
port
,
_CA_cert
,
_cert
,
_
private_key
);
return
connect
(
ip
.
toString
().
c_str
(),
port
,
CA_cert
,
cert
,
private_key
);
}
int
WiFiClientSecure
::
connect
(
const
char
*
host
,
uint16_t
port
,
const
char
*
_CA_cert
,
const
char
*
_cert
,
const
char
*
_
private_key
)
int
WiFiClientSecure
::
connect
(
const
char
*
host
,
uint16_t
port
,
const
char
*
CA_cert
,
const
char
*
cert
,
const
char
*
private_key
)
{
if
(
_timeout
>
0
){
sslclient
->
handshake_timeout
=
_timeout
;
}
int
ret
=
start_ssl_client
(
sslclient
,
host
,
port
,
_timeout
,
_CA_cert
,
_cert
,
_private_key
,
NULL
,
NULL
);
int
ret
=
start_ssl_client
(
sslclient
,
host
,
port
,
_timeout
,
CA_cert
,
cert
,
private_key
,
NULL
,
NULL
,
_use_insecure
);
_lastError
=
ret
;
if
(
ret
<
0
)
{
log_e
(
"start_ssl_client: %d"
,
ret
);
...
...
@@ -138,7 +139,7 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, const char *_CA_c
}
int
WiFiClientSecure
::
connect
(
IPAddress
ip
,
uint16_t
port
,
const
char
*
pskIdent
,
const
char
*
psKey
)
{
return
connect
(
ip
.
toString
().
c_str
(),
port
,
_pskIdent
,
_
psKey
);
return
connect
(
ip
.
toString
().
c_str
(),
port
,
pskIdent
,
psKey
);
}
int
WiFiClientSecure
::
connect
(
const
char
*
host
,
uint16_t
port
,
const
char
*
pskIdent
,
const
char
*
psKey
)
{
...
...
@@ -146,7 +147,7 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, const char *pskId
if
(
_timeout
>
0
){
sslclient
->
handshake_timeout
=
_timeout
;
}
int
ret
=
start_ssl_client
(
sslclient
,
host
,
port
,
_timeout
,
NULL
,
NULL
,
NULL
,
_pskIdent
,
_psKey
);
int
ret
=
start_ssl_client
(
sslclient
,
host
,
port
,
_timeout
,
NULL
,
NULL
,
NULL
,
pskIdent
,
psKey
,
_use_insecure
);
_lastError
=
ret
;
if
(
ret
<
0
)
{
log_e
(
"start_ssl_client: %d"
,
ret
);
...
...
@@ -245,6 +246,16 @@ uint8_t WiFiClientSecure::connected()
return
_connected
;
}
void
WiFiClientSecure
::
setInsecure
()
{
_CA_cert
=
NULL
;
_cert
=
NULL
;
_private_key
=
NULL
;
_pskIdent
=
NULL
;
_psKey
=
NULL
;
_use_insecure
=
true
;
}
void
WiFiClientSecure
::
setCACert
(
const
char
*
rootCA
)
{
_CA_cert
=
rootCA
;
...
...
libraries/WiFiClientSecure/src/WiFiClientSecure.h
View file @
ef99cd7f
...
...
@@ -33,6 +33,7 @@ protected:
int
_lastError
=
0
;
int
_peek
=
-
1
;
int
_timeout
=
0
;
bool
_use_insecure
;
const
char
*
_CA_cert
;
const
char
*
_cert
;
const
char
*
_private_key
;
...
...
@@ -62,6 +63,7 @@ public:
void
stop
();
uint8_t
connected
();
int
lastError
(
char
*
buf
,
const
size_t
size
);
void
setInsecure
();
// Don't validate the chain, just accept whatever is given. VERY INSECURE!
void
setPreSharedKey
(
const
char
*
pskIdent
,
const
char
*
psKey
);
// psKey in Hex
void
setCACert
(
const
char
*
rootCA
);
void
setCertificate
(
const
char
*
client_ca
);
...
...
libraries/WiFiClientSecure/src/ssl_client.cpp
View file @
ef99cd7f
...
...
@@ -51,13 +51,17 @@ void ssl_init(sslclient_context *ssl_client)
}
int
start_ssl_client
(
sslclient_context
*
ssl_client
,
const
char
*
host
,
uint32_t
port
,
int
timeout
,
const
char
*
rootCABuff
,
const
char
*
cli_cert
,
const
char
*
cli_key
,
const
char
*
pskIdent
,
const
char
*
psKey
)
int
start_ssl_client
(
sslclient_context
*
ssl_client
,
const
char
*
host
,
uint32_t
port
,
int
timeout
,
const
char
*
rootCABuff
,
const
char
*
cli_cert
,
const
char
*
cli_key
,
const
char
*
pskIdent
,
const
char
*
psKey
,
bool
insecure
)
{
char
buf
[
512
];
int
ret
,
flags
;
int
enable
=
1
;
log_v
(
"Free internal heap before TLS %u"
,
ESP
.
getFreeHeap
());
if
(
rootCABuff
==
NULL
&&
pskIdent
==
NULL
&&
psKey
==
NULL
&&
!
insecure
)
{
return
-
1
;
}
log_v
(
"Starting socket"
);
ssl_client
->
socket
=
-
1
;
...
...
@@ -118,7 +122,10 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p
// MBEDTLS_SSL_VERIFY_REQUIRED if a CA certificate is defined on Arduino IDE and
// MBEDTLS_SSL_VERIFY_NONE if not.
if
(
rootCABuff
!=
NULL
)
{
if
(
insecure
)
{
mbedtls_ssl_conf_authmode
(
&
ssl_client
->
ssl_conf
,
MBEDTLS_SSL_VERIFY_NONE
);
log_i
(
"WARNING: Skipping SSL Verification. INSECURE!"
);
}
else
if
(
rootCABuff
!=
NULL
)
{
log_v
(
"Loading CA cert"
);
mbedtls_x509_crt_init
(
&
ssl_client
->
ca_cert
);
mbedtls_ssl_conf_authmode
(
&
ssl_client
->
ssl_conf
,
MBEDTLS_SSL_VERIFY_REQUIRED
);
...
...
@@ -126,8 +133,8 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p
mbedtls_ssl_conf_ca_chain
(
&
ssl_client
->
ssl_conf
,
&
ssl_client
->
ca_cert
,
NULL
);
//mbedtls_ssl_conf_verify(&ssl_client->ssl_ctx, my_verify, NULL );
if
(
ret
<
0
)
{
// free the ca_cert in the case parse failed, otherwise, the old ca_cert still in the heap memory, that lead to "out of memory" crash.
mbedtls_x509_crt_free
(
&
ssl_client
->
ca_cert
);
// free the ca_cert in the case parse failed, otherwise, the old ca_cert still in the heap memory, that lead to "out of memory" crash.
mbedtls_x509_crt_free
(
&
ssl_client
->
ca_cert
);
return
handle_error
(
ret
);
}
}
else
if
(
pskIdent
!=
NULL
&&
psKey
!=
NULL
)
{
...
...
@@ -161,11 +168,10 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p
return
handle_error
(
ret
);
}
}
else
{
mbedtls_ssl_conf_authmode
(
&
ssl_client
->
ssl_conf
,
MBEDTLS_SSL_VERIFY_NONE
);
log_i
(
"WARNING: Use certificates for a more secure communication!"
);
return
-
1
;
}
if
(
cli_cert
!=
NULL
&&
cli_key
!=
NULL
)
{
if
(
!
insecure
&&
cli_cert
!=
NULL
&&
cli_key
!=
NULL
)
{
mbedtls_x509_crt_init
(
&
ssl_client
->
client_cert
);
mbedtls_pk_init
(
&
ssl_client
->
client_key
);
...
...
@@ -173,8 +179,8 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p
ret
=
mbedtls_x509_crt_parse
(
&
ssl_client
->
client_cert
,
(
const
unsigned
char
*
)
cli_cert
,
strlen
(
cli_cert
)
+
1
);
if
(
ret
<
0
)
{
// free the client_cert in the case parse failed, otherwise, the old client_cert still in the heap memory, that lead to "out of memory" crash.
mbedtls_x509_crt_free
(
&
ssl_client
->
client_cert
);
// free the client_cert in the case parse failed, otherwise, the old client_cert still in the heap memory, that lead to "out of memory" crash.
mbedtls_x509_crt_free
(
&
ssl_client
->
client_cert
);
return
handle_error
(
ret
);
}
...
...
@@ -211,7 +217,7 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p
}
if
((
millis
()
-
handshake_start_time
)
>
ssl_client
->
handshake_timeout
)
return
-
1
;
vTaskDelay
(
10
/
portTICK_PERIOD_MS
);
vTaskDelay
(
2
);
//2 ticks
}
...
...
libraries/WiFiClientSecure/src/ssl_client.h
View file @
ef99cd7f
...
...
@@ -29,7 +29,7 @@ typedef struct sslclient_context {
void
ssl_init
(
sslclient_context
*
ssl_client
);
int
start_ssl_client
(
sslclient_context
*
ssl_client
,
const
char
*
host
,
uint32_t
port
,
int
timeout
,
const
char
*
rootCABuff
,
const
char
*
cli_cert
,
const
char
*
cli_key
,
const
char
*
pskIdent
,
const
char
*
psKey
);
int
start_ssl_client
(
sslclient_context
*
ssl_client
,
const
char
*
host
,
uint32_t
port
,
int
timeout
,
const
char
*
rootCABuff
,
const
char
*
cli_cert
,
const
char
*
cli_key
,
const
char
*
pskIdent
,
const
char
*
psKey
,
bool
insecure
);
void
stop_ssl_socket
(
sslclient_context
*
ssl_client
,
const
char
*
rootCABuff
,
const
char
*
cli_cert
,
const
char
*
cli_key
);
int
data_to_read
(
sslclient_context
*
ssl_client
);
int
send_ssl_data
(
sslclient_context
*
ssl_client
,
const
uint8_t
*
data
,
uint16_t
len
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment