ESP8266からHTTPS先をGETする

はじめに

ESP8266/ArduinoのWiFiClientSecureが実装されてから結構経ちますが、今までHTTPS先にESP系のマイコンからアクセスする機会がなく、やったことがありませんでした。(ラズパイで逃げてた)

ただ、やってみると意外と楽に接続できたので備忘録として残しておきます。

いきなりサンプルコード

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#ifndef STASSID
#define STASSID "*******"
#define STAPSK  "*******"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
const char* host = "saitetu.net";
const int httpsPort = 443;
// ここ注意 (後述)
const char fingerprint[] PROGMEM = "01 9F 8E 5A 4D B8 29 F8 BF 3D 36 87 8B D1 9C 87 D8 49 B8 AD";
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
WiFiClientSecure client;
Serial.print("connecting to ");
Serial.println(host);
Serial.printf("Using fingerprint '%s'\n", fingerprint);
client.setFingerprint(fingerprint);
if (!client.connect(host, httpsPort)) {
Serial.println("connection failed");
return;
}
String url = "";
Serial.print("requesting URL: ");
Serial.println(url);
client.print(String("GET /") + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("request sent");
Serial.println("reply was:");
Serial.println("==========");
while (client.connected() || client.available()) {
String line = client.readStringUntil('\n');
Serial.println(line);
}
Serial.println("==========");
Serial.println("closing connection");
}
void loop() {
}

書き込むとここにGETしに行きます↓

https://saitetu.net/

解説

基本的には WiFiClientSecureをインスタンス化してprintでつなげるだけなんですが、Secureじゃないのとの違いはfingerprintの違いです。

このfingerprintはHTTPS先につなげるための証明書です。

SHA-1の形式で記述する必要があるのですが、どこで確認したらいいかで少し詰まったのでここに書きます。

答え

いきなり答えから言うと、ブラウザから確認できます。

Chromeからの場合は以下のとおりです。

Developer Tool→Secure→View certificate↓

f:id:saitetutan:20190210133635p:plain
fingerprintの確認方法

ここから確認できます。

それ以外の確認方法は以下を参考に

hacknote.jp

ではノシ

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です