-
Notifications
You must be signed in to change notification settings - Fork 13.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WiFiClientSecure not working lwip mode ! (insecure) #8291
Comments
the service at djxmmx.net:17 doesn't support secure connection. use some https site for the test |
i Want to read this link : My Code : // WiFi.begin(ssid, pass);
// SPI.begin();
// while (WiFi.status() != WL_CONNECTED)
// {
// delay(500);
// Serial.print(".");
// }
// Serial.println();
//
// Serial.print("Connected, IP address: ");
// Serial.println(WiFi.localIP()); Ethernet Connection : eth.setDefault(); // use ethernet for default route
if (!eth.begin(mac)) {
Serial.println("ethernet hardware not found ... sleeping");
while (1) {
delay(1000);
}
} else {
Serial.print("connecting ethernet");
while (!eth.connected()) {
Serial.print(".");
delay(1000);
}
} Main Code : #include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <FS.h>
#include "ESP8266httpUpdate.h"
#include <ENC28J60lwIP.h>
//#include <W5500lwIP.h>
#define CSPIN 15
//Wiznet5500lwIP eth(CSPIN);
ENC28J60lwIP eth(CSPIN);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(23, 28, 179, 206);
class TLSClass {
public:
boolean TLS_Call(String command_get);
String AnsTLS = "";
String PrivateKey = "";
};
boolean TLSClass::TLS_Call(String command_get) {
boolean TLS = false;
// WiFi.mode(WIFI_OFF);
static bool wait = true;
Serial.print("connecting to ");
Serial.print("assess.mmaviot.com");
Serial.print(':');
Serial.println("443");
//WiFiClient client;
WiFiClientSecure client;
client.setTimeout(5000);
client.setInsecure();
if (client.connect("assess.mmaviot.com", 443)) {
Serial.println("connected to host");
client.print( String("GET ") + command_get + " HTTP/1.1\r\n" + "Host: " + "assess.mmaviot.com" + "\r\n" + "Connection: close" + "\r\n\r\n");
Serial.println("request sent");
Serial.flush();
char status[20] = {0};
client.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") == 0)
{
Serial.println("Connection Success");
TLS = true;
while (client.connected()) {
char endOfHeaders[] = "\r\n\r\n";
if (client.find(endOfHeaders)) {
Serial.println(status);
String Data_Server = client.readString();
AnsTLS = Data_Server;
Serial.println(Data_Server);
}
}
}
else {
Serial.println("** Connection Failed **");
Serial.println(status);
}
Serial.println("receiving from remote server");
// not testing 'client.connected()' since we do not need to send data here
Serial.println("Print Data Available");
while (client.available()) {
char ch = static_cast<char>(client.read());
Serial.print(ch);
}
Serial.println("closing connection");
client.stop();
client.flush();
}
else
{
TLS = false;
Serial.println("***********************");
Serial.println("** Connection Failed **");
Serial.println("***********************");
delay(3000);
}
return TLS;
} Result =>>
Overt Ethernet Cable :
I just change the connection type |
Do you have any comments? |
This comment has been minimized.
This comment has been minimized.
Hello @elexal, Digging a bit deeper into the matter and debugging with the additional debug flags
However, I currently use the following as a temporary workaround (before each
It should query the IP from the DNS server and cache it so that the name resolution won't fail. This has worked fine so far for me. However, I haven't done much testing. Maybe someone else could double-check the described behavior and workaround. |
Dns error -5 with W5500 module.. give a look here #6212 :) |
Can you try with this PR #8317 ? |
Works as intended :) |
esp_yield() now also calls esp_schedule(), original esp_yield() function renamed to esp_suspend(). Don't use delay(0) in the Core internals, libraries and examples. Use yield() when the code is supposed to be called from CONT, use esp_yield() when the code can be called from either CONT or SYS. Clean-up esp_yield() and esp_schedule() declarations across the code and use coredecls.h instead. Implement helper functions for libraries that were previously using esp_yield(), esp_schedule() and esp_delay() directly to wait for certain SYS context tasks to complete. Correctly use esp_delay() for timeouts, make sure scheduled functions have a chance to run (e.g. LwIP_Ethernet uses recurrent) Related issues: - #6107 - discussion about the esp_yield() and esp_delay() usage in ClientContext - #6212 - discussion about replacing delay() with a blocking loop - #6680 - pull request introducing LwIP-based Ethernet - #7146 - discussion that originated UART code changes - #7969 - proposal to remove delay(0) from the example code - #8291 - discussion related to the run_scheduled_recurrent_functions() usage in LwIP Ethernet - #8317 - yieldUntil() implementation, similar to the esp_delay() overload with a timeout and a 0 interval
Closing via #7148 as well |
hello friend
we have an ESP8266 that connects to the host SSL with wifi
And we receive data from it without any problems
We have an interface Ethernet(W5500 or Enc28j60) which we want to receive data from it
If the SSL does not exist it connects to the server and receives the data with wificlient and lwip library
When we activate Setinsecure and WiFiClientSecure it doesn’t connect to the server anymore.
The server that we want to connect to by Ethernet has SSL and we have to use wificlient secure library that works without any problem on wifi , but on Ethernet mode it doesn’t connect
Codes for wifi and Ethernet are the same and are used from one library
In the following example we connect to a host by Ethernet and receive data but if we change the library from wifi client to wificlient secure it doesn’t work anymore.
`/*
This sketch establishes a TCP connection to a "quote of the day" service.
It sends a "hello" message, and then prints received data.
*/
#include <SPI.h>
#include <ENC28J60lwIP.h>
#include <ESP8266WiFi.h>
const char* host = "djxmmx.net";
const uint16_t port = 17;
#define CSPIN D1
ENC28J60lwIP eth(CSPIN);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(23, 28, 179, 206);
void setup() {
Serial.begin(115200);
delay(500);
WiFi.mode(WIFI_OFF);
SPI.begin();
// if (!eth.config(ip, gw, nm, gw, IPADDR_NONE)) {
// Serial.println("wrong config");
// }
eth.setDefault(); // use ethernet for default route
if (!eth.begin(mac)) {
Serial.println("ethernet hardware not found ... sleeping");
while (1) {
delay(1000);
}
} else {
Serial.print("connecting ethernet");
while (!eth.connected()) {
Serial.print(".");
delay(1000);
}
}
Serial.println();
Serial.print("ethernet IP address: ");
Serial.println(eth.localIP());
Serial.println(eth.gatewayIP());
Serial.println(eth.subnetMask());
Serial.println(WiFi.dnsIP());
}
void loop() {
static bool wait = true;
Serial.print("connecting to ");
Serial.print(host);
Serial.print(':');
Serial.println(port);
WiFiClient client;
if (!client.connect(host, port)) {
Serial.println("connection failed");
delay(5000);
return;
}
// This will send a string to the server
Serial.println("sending data to server");
if (client.connected()) {
client.println("hello from ESP8266");
}
// wait for data to be available
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
delay(60000);
return;
}
}
// Read all the lines of the reply from server and print them to Serial
Serial.println("receiving from remote server");
// not testing 'client.connected()' since we do not need to send data here
while (client.available()) {
char ch = static_cast(client.read());
Serial.print(ch);
}
// Close the connection
Serial.println();
Serial.println("closing connection");
client.stop();
if (wait) {
delay(300000); // execute once every 5 minutes, don't flood remote service
}
wait = true;
}`
The text was updated successfully, but these errors were encountered: