ESP8266访问https地址,ESP32

做了一个小项目,使用的ESP8266 访问https地址来上传数据(虽然直接使用TCP连接来传可能更方便,但对方要求通过访问https我也只能照做)arduino中有ESP8266HTTPClient来进行http和https连接,http连接则比较简单,直接使用示例程序修改即可,而https还需要验证网站指纹证书。实际使用如下

void http_post() {
  date_str = (char *) malloc(strlen(URL) +7 );
  sprintf(date_str, "%s%s%c%s",URL,temc,'/',humc);//合成访问地址
  Serial.println(date_str);
    std::unique_ptrclient(new BearSSL::WiFiClientSecure);
    client->setFingerprint(fingerprint);
    HTTPClient https;//根据访问地址的协议来选择使用http还是https,用https就需要使用网站的证书
    Serial.print("[HTTPS] begin...\n");
    if (https.begin(*client, date_str)) {  // HTTPS

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = https.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      }

      https.end();
    } else {
      Serial.printf("[HTTPS] Unable to connect\n");
    }

}

date_str就是最终的访问地址,fingerprint就是需要验证的网站指纹证书,格式如下

const uint8_t fingerprint[20] = {0xDE, 0x17, 0x1D, 0xD8, 0xC0, 0xE9, 0xDF, 0x28 ,0xB3 ,0xCD ,0x38 ,0x0E ,0x80 ,0xA4 ,0x2A ,0xF3
,0x28 ,0xC3 ,0x28 ,0x4E};//网站证书指纹

具体如何获取可以借用浏览器来获取,比如访问https://www.baidu.com/

首先使用浏览器打开(可用edge,Chrome,这里用的edge)

ESP8266访问https地址,ESP32_第1张图片

点击锁的图形,然后点击连接安全选项,再点右上方的证书图形

ESP8266访问https地址,ESP32_第2张图片

点开后就可以看到网站的指纹证书了

ESP8266访问https地址,ESP32_第3张图片

我们需要的是SHA-1,把这串指纹填入我们程序就行了(记得改好格式,16进制就需要加0x)

你可能感兴趣的:(单片机,https,网络协议)