我遇到了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();
执行此操作时,我在调试日志中收到以下内容:
State: sending Client Hello (1)
Alert: handshake failure
Error: SSL error 40
Alert: unexpected message
Error: SSL error 40
Alert: close notify
[HTTP-Client] failed connect to someUrl.com:443
我尝试检查grc上的指纹并得到以下回复:
从远程服务器获取的SSL / TLS安全证书无效。麻烦严重到我们无法获得证书的通用名称和/或指纹。在HTTPS端口443上有一个服务器应答与您提供的域名相关联的IP地址(如上所示)。但是服务器可能正在回答HTTPS,就好像它是HTTP并返回网页而不是正确的SSL / TLS设置握手。 (我们遇到过这种行为。)
这让我相信主机上的SSL配置有问题。 但是,使用我的浏览器访问URL时,证书没有问题(尝试使用IE,Edge和FireFox)。
根据this comment to an issue on github,只有两个支持的密码套件:
主机支持以下密码套件:
是否有机会在ESP8266上对此主机执行HTTPS请求?也许是另一个HttpClient库?
答案 0 :(得分:0)
不幸的是没有使用Arduino ESP8266,因为它使用axTLS,无论您使用什么HTTP客户端库。他们根本不支持它。
然而,Espressif的SDK在一段时间后切换到mbedTLS,mbedTLS Supported Cipher Suites表明它包含对这些密码的支持。但是,使用Arduino SDK制作的代码与Espressif SDK在很大程度上是不兼容的。
答案 1 :(得分:0)
根据https://github.com/esp8266/Arduino/issues/2771,现在将Arduino ESP8266库切换为BearSSL,据说该库支持更多密码。不幸的是,由于我有同样的问题(需要登录才能捕获SSL上的门户以进行wifi访问),因此我的知识不足(现在尝试2天)来实施此修复程序,但希望我很快能找到答案。