C++ Arduino ESP8266HTTPClient:握手失败(SSL错误40)

C++ Arduino ESP8266HTTPClient:握手失败(SSL错误40),c++,ssl,arduino,esp8266,arduino-esp8266,C++,Ssl,Arduino,Esp8266,Arduino Esp8266,我面临ESP8266HTTPClient和SSL的问题 #include <ESP8266HTTPClient.h> const char* url= "https://someUrl.com"; const char* fingerPrint= "SO ME SH A1 FI NG ER PR IN T"; HTTPClient http; http.begin(url, fingerPrint); http.GET(); #包括 常量字符*url=”https://some

我面临ESP8266HTTPClient和SSL的问题

#include <ESP8266HTTPClient.h>

const char* url= "https://someUrl.com";
const char* fingerPrint= "SO ME SH A1 FI NG ER PR IN T";

HTTPClient http;
http.begin(url, fingerPrint);
http.GET();
#包括
常量字符*url=”https://someUrl.com";
const char*fingerPrint=“因此,我会在T中创建一个文件”;
HTTPClient-http;
http.begin(url,指纹);
http.GET();
执行此操作时,我在调试日志中收到以下消息:

状态:发送客户端Hello(1)
警报:握手失败
错误:SSL错误40
警报:意外消息
错误:SSL错误40
警报:关闭通知
[HTTP客户端]无法连接到someUrl.com:443

我试图检查手机上的指纹,得到了以下响应:

从远程服务器获取的SSL/TLS安全证书无效。问题严重到我们无法获取证书的通用名称和/或指纹。与您提供的域名(如上所示)关联的IP地址的HTTPS端口443上有一个服务器应答。但是服务器可能会像HTTP一样应答HTTPS并返回网页,而不是正确的SSL/TLS设置握手。(我们遇到了这种行为。)

这让我相信主机上的SSL配置有问题。 但是,使用我的浏览器(IE、Edge和FireFox)访问url时,证书没有问题

根据,只有两个受支持的密码套件:

  • TLS_RSA_与_AES_128_CBC_SHA和
  • TLS_RSA_与_AES_256_CBC_SHA
主机支持以下密码套件:

  • TLS_ECDHE_RSA_与_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_与_AES_256_GCM_SHA384

是否有机会在ESP8266上对此主机执行HTTPS请求?可能是另一个HttpClient库?

不幸的是,Arduino ESP8266不能使用,因为无论您使用什么HTTP客户端库,它都使用axTLS。他们根本不支持

然而,不久前Espressif的SDK切换到了mbedTLS,并显示它包括对这些密码的支持。然而,使用Arduino SDK编写的代码在很大程度上与Espressif SDK不兼容。

根据Arduino ESP8266库,现在正在切换到BearSSL,据推测它支持更多密码。不幸的是,我的知识不足以(现在已经尝试了2天)实施修复,因为我有同样的问题(需要登录到SSL上捕获门户以进行wifi访问),但希望我很快就会发现