位置导航: ESP8266库 / WiFiClientSecure库 / 本页
说明
setCiphers可用来设置ESP8266的HTTPS通讯加密方式。与使用setTrustAnchors函数来对服务器根证书认证比较,setCiphers安全性能要更低。但是此使用setCiphers可以降低ESP8266的运算工作。因此ESP8266的能耗也会相应降低。如果您的项目使用电池为ESP8266供电且需要降低ESP8266能耗,可以考虑采用此方法实现ESP8266的HTTPS通讯。如需了解更多加密方式,请参考ESP8266库源文件中WiFiClientSecureBearSSL.cpp中相关信息。
语法
httpsClient.setCiphers(cipherList)
参数
cipherList: 加密方式
返回值
成功设置加密方式,则返回true。否则返回false。返回值为布尔型。
示例程序
以下程序将实现ESP8266建立与网站的HTTPS通讯,并且将网站服务器响应状态码以及响应头信息显示于串口监视器中。
请将以下示例程序中的Wifi联网信息进行调整并将程序上传给ESP8266。程序上传完毕后,ESP8266将会自动连接 WiFi并通过HTTPS协议与必应网站服务器进行通讯。服务器响应状态码以及响应头信息显示于串口监视器中以便我们查阅。
在以下示例程序中,我们在使用setCiphers前需要首先使用httpsClient.setInsecure()
来设置ESP8266。接下来使用 httpsClient.setCiphers(myCustomList)来设置具体加密方式。具体操作方法,请见以下程序中高亮语句部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266-WiFiClientSecure-setCiphers 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200419 程序目的/Purpose : 以下程序将实现ESP8266开发板建立与网站的HTTPS通讯,并且将网站服务器响应信息 显示于串口监视器中。本程序使用了setCiphers来设置通讯加密方式。此方法与使用 服务器根证书认证方法比较,安全性能要更低。但是此方法可以降低ESP8266的运算工作。 因此ESP8266的能耗也会相应降低。如果您的项目使用电池为ESP8266供电,且需要降低 ESP8266能耗,可以考虑采用此方法实现ESP8266的HTTPS通讯。如需了解更多加密方式, 请参考ESP8266库源文件中WiFiClientSecureBearSSL.cpp中相关信息。 ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include <ESP8266WebServer.h> //WiFi连接信息(注意:需要自行修改以下内容否则ESP8266无法连接WiFi) #define ssid "taichimaker" //WiFi名称 #define password "12345678" //WiFi密码 //测试HTTPS通讯的网站 const char *host = "cn.bing.com"; //HTTPS端口443 const int httpsPort = 443; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); //设置ESP8266为无线终端工作模式 WiFi.begin(ssid, password); //连接WiFi Serial.println(""); Serial.println("Connecting"); Serial.println(""); // 等待连接 while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } //成功连接后通过串口监视器显示WiFi名称以及ESP8266的IP地址。 Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); httpsCom(); // 实现https通讯 } void loop() {} // 实现https通讯 void httpsCom(){ WiFiClientSecure httpsClient; //建立WiFiClientSecure对象 // 设置时间 setClock(); Serial.println("set ciphers..."); // 添加加密方式(如需了解更多加密方式,请参考ESP8266库源文件中WiFiClientSecureBearSSL.cpp中相关信息) std::vector<uint16_t> myCustomList = { BR_TLS_RSA_WITH_AES_256_CBC_SHA256, BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA }; // 使用setCiphers前需要首先使用setInsecure来设置ESP8266 httpsClient.setInsecure(); // 接下来使用setCiphers来设置具体加密方式 httpsClient.setCiphers(myCustomList); httpsClient.setTimeout(15000); delay(1000); Serial.println("HTTPS Connecting");Serial.println(""); int r=0; // 尝试连接服务器并等待 while((!httpsClient.connect(host, httpsPort)) && (r < 30)){ delay(100); Serial.print("."); r++; } // 连接超时后输出"连接失败"信息并返回 if(r==30) { Serial.println("Connection failed"); return; } else { // 连接成功则输出“连接成功”信息 Serial.println("Connected..."); } Serial.print("requesting: "); Serial.println(host); // 建立HTTPS请求信息字符串 String request = String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n" + "\r\n"; // 向服务器发送请求 httpsClient.print(request); Serial.println("request sent"); // 检查服务器响应信息。通过串口监视器输出服务器状态码和响应头信息 // 从而确定ESP8266已经成功连接服务器 while (httpsClient.connected()) { String line = httpsClient.readStringUntil('\n'); Serial.println(line); if (line == "\r") { Serial.println("headers received"); break; } } Serial.println("Now disconect from the server..."); //操作结束,断开服务器连接 httpsClient.stop(); Serial.println("closing connection"); } // 获取网络时间,该时间信息用于证书认证 void setClock() { configTime(3 * 3600, 0, "ntp.ntsc.ac.cn","pool.ntp.org", "time.nist.gov"); // bool configTime(int timezone, int daylightOffset, char *server1, char *server2, char *server3, bool enable); Serial.print("Waiting for NTP time sync: "); time_t now = time(nullptr); while (now < 8 * 3600 * 2) { delay(500); Serial.print("."); now = time(nullptr); } Serial.println(""); struct tm timeinfo; gmtime_r(&now, &timeinfo); Serial.print("Current time: "); Serial.print(asctime(&timeinfo)); } |
位置导航: ESP8266库 / WiFiClientSecure库 / 本页