{"id":1807,"date":"2024-02-20T18:56:24","date_gmt":"2024-02-20T09:56:24","guid":{"rendered":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1807"},"modified":"2024-03-06T14:39:11","modified_gmt":"2024-03-06T05:39:11","slug":"esp8266%e3%81%aewificlientsecure%e7%b3%bb%e3%81%a7cert%e3%82%92%e6%89%b1%e3%81%86%e6%99%82%e3%81%ae%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1807","title":{"rendered":"ESP8266\u306eWiFiClientSecure\u7cfb\u3067cert\u3092\u6271\u3046\u6642\u306e\u30e1\u30e2"},"content":{"rendered":"\n<p><s>\u4eca\u3001\u8abf\u3079\u306a\u304c\u3089\u8a66\u3057\u3066\u3044\u308b\u3051\u3069chatgpt\u306b\u5b58\u5728\u3057\u306a\u3044\u30e1\u30bd\u30c3\u30c9\u8a00\u308f\u308c\u305f\u308a\u3068\u9a19\u3055\u308c\u308b\u3063\u307d\u3044\u306e\u3067\u30e1\u30e2\u3092\u6b8b\u3059\u3002<\/s>\u7d42\u4e86<\/p>\n\n\n\n<p>ESP8266(ESP-WROOM-02)\u306e\u5185\u5bb9\u3002ESP-WROOM-32\u3067\u306f\u306a\u3044\u306e\u3067\u6ce8\u610f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u74b0\u5883<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows11<\/li>\n\n\n\n<li>Arfuino IDE 2.3.1<\/li>\n\n\n\n<li>esp8266 by ESP8266 Community 3.1.2(<a href=\"https:\/\/github.com\/esp8266\/Arduino\/tree\/3.1.2\">\u30ec\u30dd\u30b8\u30c8\u30ea<\/a>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u52d5\u304d\u305d\u3046\u306a\u3084\u3064\uff08\u3053\u308c\u304b\u3089\u78ba\u8a8d\u3001\u52d5\u3044\u305f\u3089\u8a18\u4e8b\u4fee\u6b63\u3059\u308b\uff09<\/h2>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">WiFiClientSecureBearSSL#setInsecure<\/h3>\n\n\n\n<p>\u57fa\u672c<a href=\"https:\/\/garretlab.web.fc2.com\/arduino\/esp32\/examples\/WiFiClientSecure\/WiFiClientInsecure.html\">\u3053\u3061\u3089<\/a>\u306e\u307e\u3093\u307e\u3067\u52d5\u3044\u305f\u3002\uff08\u30ea\u30f3\u30af\u5148\u306fESP8266\u3067\u306a\u304fESP32\u306a\u306e\u3067\u4ed6\u3092\u53c2\u8003\u306b\u3059\u308b\u3068\u304d\u306f\u30af\u30e9\u30b9\u4ed5\u69d8\u9055\u3046\u306e\u3067\u6ce8\u610f\uff09<\/p>\n\n\n\n<p>\u6700\u521d\u306f\u623b\u308a\u5024\u306b\u30d0\u30a4\u30c8\u6570\u3068\u304b\u5165\u3063\u3066\u305f\u3051\u3069\u30b5\u30fc\u30d0\u5074<a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1816\" data-type=\"post\" data-id=\"1816\">\u3067contents-length\u6307\u5b9a\u3057\u3066\u3044\u306a\u3044\u306e\u304c\u539f\u56e0<\/a>\u3060\u3063\u305f\u3002<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">BearSSL_Validation.ino<\/h3>\n\n\n\n<p>Example-&gt;Esp8266Wifi\u306e\u4e2d\u306b\u3044\u308b\u30b5\u30f3\u30d7\u30eb\u3002<\/p>\n\n\n\n<p>\u5358\u72ec\u306eCA\u3092\u30c4\u30fc\u30eb\u3067\u30d8\u30c3\u30c0\u30fc\u30d5\u30a1\u30a4\u30eb\u306b\u5909\u3048\u3066\u8aad\u307f\u8fbc\u3080\u3084\u3064\u3060\u3068\u601d\u3046\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">include\u3067\u6c17\u306b\u306a\u3063\u305f\u5974<\/h4>\n\n\n\n<p>#include &lt;StackThunk.h&gt;\u3068\u3044\u3046\u306e\u304c\u3042\u308b\u3002\uff08<a href=\"https:\/\/github.com\/esp8266\/Arduino\/blob\/master\/cores\/esp8266\/StackThunk.cpp\" data-type=\"link\" data-id=\"https:\/\/github.com\/esp8266\/Arduino\/blob\/master\/cores\/esp8266\/StackThunk.cpp\">\u5b9f\u88c5\u306ecpp<\/a>\uff09<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">StackThunk.c - Allow use second stack for BearSSL calls\n\n\n  BearSSL uses a significant amount of stack space, much larger than\n  the default Arduino core stack. These routines handle swapping\n  between a secondary, user-allocated stack on the heap and the real\n  stack.<\/pre>\n\n\n\n<p>BearSSL\u306f\u30b9\u30bf\u30c3\u30af\u3059\u3054\u3044\u4f7f\u3046\u304b\u3089\u3046\u3093\u306c\u3093\u3068\u3002\u901a\u5e38\u306e\u30b9\u30bf\u30c3\u30af\u3060\u3068\u8db3\u308a\u306a\u3044\u304b\u3089\u3001\u30d2\u30fc\u30d7\u3092\u4f7f\u3063\u3066\u3054\u306b\u3087\u3054\u306b\u3087\u3057\u3066\u304f\u308c\u308b\u3089\u3057\u3044\u3002<\/p>\n\n\n\n<p>\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u3060\u3068\u5272\u308a\u5f53\u3066\u95a2\u9023\u306e\u6a5f\u80fd\u306f\u4f7f\u3063\u3066\u304a\u3089\u305a\u4f7f\u7528\u91cf\u78ba\u8a8d\u306e\u307f\u306b\u898b\u3048\u308b\u3051\u3069\u4e2d\u3067\u8aad\u3093\u3067\u3044\u308b\u304b\u3082\u3002\u4e00\u898b\u3001\u8db3\u308a\u3066\u305d\u3046\u306b\u898b\u3048\u308b\u3068\u304d\u3082\u5185\u90e8\u3067\u3053\u3044\u3064\u304c\u4f7f\u3044\u5207\u3063\u3066\u308b\u3068\u304b\u306f\u3042\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u306e\u3067\u5fc3\u306b\u7559\u3081\u3066\u304a\u304f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e8b\u524d\u6e96\u5099<\/h4>\n\n\n\n<p>cert.py\u3092\u4f7f\u7528\u3057\u3066\u8a3c\u660e\u66f8\u306e\u30c7\u30fc\u30bf\u3092\u66f4\u65b0\u3002\uff08\u9577\u304f\u306a\u3063\u305f\u306e\u3067<a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1830\" data-type=\"post\" data-id=\"1830\">\u3053\u3061\u3089<\/a>\uff09<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u30d5\u30a3\u30f3\u30ac\u30fc\u30d7\u30ea\u30f3\u30c8\u3060\u3051\u3067\u63a5\u7d9a<\/h4>\n\n\n\n<p>\u30d5\u30a3\u30f3\u30ac\u30fc\u30d7\u30ea\u30f3\u30c8\u8a2d\u5b9a\u3059\u308c\u3070\u3068\u308a\u3042\u3048\u305a\u3064\u306a\u304c\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-26741526ffc5d6033dcb9cea419380c9\"><code>const char fingerprint_www_example_org &#91;] PROGMEM = \"4d:a2:5a:6d:5e:f6:2c:5f:95:c7:bd:0a:73:ea:3c:17:7b:36:99:9d\";<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-0af6f1ab533735adb955aea260453f1b\"><code>#define FINGERPRINT fingerprint_www_example_org\n  \nBearSSL::WiFiClientSecure client;\n  client.setFingerprint(FINGERPRINT);\n  fetchURL(&amp;client, SSL_host, SSL_port, path);<\/code><\/pre>\n\n\n\n<p>\u4f55\u3082\u306a\u3044\u3088\u308a\u307e\u3057\u3060\u3068\u3044\u3063\u3066\u3044\u308b<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">The SHA-1 fingerprint of an X.509 certificate can be used to validate it\ninstead of the while certificate.  This is not nearly as secure as real\nX.509 validation, but is better than nothing.  <\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u81ea\u5df1\u7f72\u540d\u8a3c\u660e\u66f8\u3067\u63a5\u7d9a<\/h4>\n\n\n\n<p>allowSelfSignedCert\u3059\u308c\u3070OK\u3068\u306e\u3053\u3068\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-4616b5f419a098aa61f1dfe89f58abd6\"><code>  BearSSL::WiFiClientSecure client;\n  client.allowSelfSignedCerts();\n  fetchURL(&amp;client, \"self-signed.badssl.com\", 443, \"\/\");<\/code><\/pre>\n\n\n\n<p>\u3053\u3044\u3064\u306f\u81ea\u5df1\u7f72\u540d\u306f\u8ab0\u3067\u3082\u4f5c\u308c\u308b\u304b\u3089\u6ce8\u610f\u3092\uff08\u7565<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">It is also possible to accept *any* self-signed certificate.  This is\nabsolutely insecure as anyone can make a self-signed certificate.<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u516c\u958b\u9375\u3067\u63a5\u7d9a<\/h4>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-483d185183313470f5863e68ae1c8455\"><code>const char pubkey_www_example_org &#91;] PROGMEM = R\"PUBKEY(\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhoUPuw75yl\/Z9eAKMiwz\uff08\u7565\uff09<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-d6259c2e24bb04bbc13ace099e9a67f6\"><code>#define PUBKEY pubkey_www_example_org\nBearSSL::WiFiClientSecure client;\nBearSSL::PublicKey key(PUBKEY);\nclient.setKnownKey(&amp;key);\nfetchURL(&amp;client, SSL_host, SSL_port, path);<\/code><\/pre>\n\n\n\n<p>\u516c\u958b\u9375\u3092\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3057\u3066\u304a\u3044\u3066\u305d\u3044\u3064\u3092\u4f7f\u3063\u3066\uff08\u901a\u5e38\u306eSSL\u306f\u8a8d\u8a3c\u30d7\u30ed\u30bb\u30b9\u3092\u98db\u3070\u3057\u3066\uff09\u901a\u4fe1\u3067\u304d\u308b\u3002\u4e00\u822c\u516c\u958b\u3057\u306a\u3044\u30b5\u30fc\u30d3\u30b9\u306a\u3089\u3053\u308c\u3067\u3082\u3088\u3055\u305d\u3046\u306a\u6c17\u304c\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">The server certificate can be completely ignored and its public key\nhardcoded in your application. This should be secure as the public key\nneeds to be paired with the private key of the site, which is obviously\nprivate and not shared.  A MITM without the private key would not be\nable to establish communications.<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">cert\u3092\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u65b9\u5f0f(\u591a\u5206\u4e00\u756a\u56fa\u3044)<\/h4>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-a274d6abb2bbaedfd8543846a3b27db4\"><code>const char pubkey_www_example_org &#91;] PROGMEM = R\"PUBKEY(\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhoUPuw75yl\/Z9eAKMiwz<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-f0b3f70762d0188cf7d9d2db33ffb190\"><code>#define CERT cert_DigiCert_Global_G2_TLS_RSA_SHA256_2020_CA1\nBearSSL::X509List cert(CERT);\nclient.setTrustAnchors(&amp;cert);\nsetClock();\/\/ \u6709\u52b9\u671f\u9593\u78ba\u8a8d\u7528\u306b\u6642\u523b\u8a2d\u5b9a\uff08\u8a73\u7d30\u306f\u30bd\u30fc\u30b9\u78ba\u8a8d\uff09\nfetchURL(&amp;client, SSL_host, SSL_port, path);<\/code><\/pre>\n\n\n\n<p>cert\u3092\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3057\u3066\u691c\u8a3c\u3059\u308b\u65b9\u5f0f\u3002<\/p>\n\n\n\n<p>\u6709\u52b9\u671f\u9650\u30c1\u30a7\u30c3\u30af\u306f\u3059\u308b\u3051\u308c\u3069\u3082<a href=\"https:\/\/www.cybertrust.co.jp\/sureserver\/support\/glossary\/crl.html\">CRL<\/a>\u306f\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044\u3089\u3057\u3044\u3002\u767a\u884c\u3055\u308c\u305f\u8a3c\u660e\u66f8\u304c\u6709\u52b9\u671f\u9650\u5185\u306b\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u3066\u3082\u30c1\u30a7\u30c3\u30af\u3055\u308c\u306a\u3044\u3002\u81ea\u5df1\u7f72\u540d\u8a3c\u660e\u66f8\u3092\u30eb\u30fc\u30c8\u306b\u3057\u305f\u30c1\u30a7\u30fc\u30f3\u3082\u4f5c\u308c\u308b\u3089\u3057\u3044\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">A specific certification authority can be passed in and used to validate\na chain of certificates from a given server.  These will be validated\nusing BearSSL's rules, which do NOT include certificate revocation lists.\nA specific server's certificate, or your own self-signed root certificate\ncan also be used.  ESP8266 time needs to be valid for checks to pass as\nBearSSL does verify the notValidBefore\/After fields.<\/pre>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-a90bae53dd0e9df534bd843cdde54480\"><code>\/\/#define CERT cert_DigiCert_Global_G2_TLS_RSA_SHA256_2020_CA1\n#define CERT cert_DigiCert_Global_Root_G2<\/code><\/pre>\n\n\n\n<p><s>\u4e0a\u306e\u3088\u3046\u306bcert\u3092\u30eb\u30fc\u30c8\u8a3c\u660e\u66f8\u306b\u3057\u3066\u3082\u52d5\u304f\u306f\u305a\u3060\u304c\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u308a\u305d\u3073\u308c\u308b\u3068\u304d\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u3044\u305f\u3002\u30eb\u30fc\u30c8\u3058\u3083\u306a\u304f\u3066\u30b5\u30fc\u30d0\u306ecert\u3092\u4f7f\u3063\u3066\u3044\u308b\u3068\u304d\u3082\u53d6\u308a\u305d\u3073\u308c\u767a\u751f\u3057\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u3002<\/s><strong><s>\u539f\u56e0\u8abf\u67fb\u672a\u3002\u3068\u308a\u6025\u304e\u8abf\u67fb\u306f\u304a\u3044\u3066\u304a\u3044\u3066\u4ed6\u306e\u65b9\u5f0f\u306e\u78ba\u8a8d\u9032\u3081\u308b\u3002\u3068\u3001\u601d\u3063\u305f\u3089<\/s>\u65b9\u5f0f\u5225\u3067\u3082\u767a\u751f\u3057\u3066\u3044\u308b\u3002<\/strong>=&gt; <a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1853\" data-type=\"post\" data-id=\"1853\">\u89e3\u6c7a\u65b9\u6cd5<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u6697\u53f7\u5316\u65b9\u5f0f\u306e\u9078\u629e<\/h4>\n\n\n\n<p>\u65e9\u3055\u512a\u5148\u3057\u305f\u3044\u3068\u304d\u3068\u304b<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">client.setInsecure();<\/h5>\n\n\n\n<p>\u30ce\u30fc\u30c1\u30a7\u30c3\u30af<\/p>\n\n\n\n<p>client.setCiphersLessSecure();<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u3084\u3064\u3089\u6307\u5b9a\uff08\u3068\u601d\u3046\uff09<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ For apps which want to use less secure but faster ciphers, only\n  static const uint16_t faster_suites_P[] PROGMEM = {\n    BR_TLS_RSA_WITH_AES_256_CBC_SHA256,\n    BR_TLS_RSA_WITH_AES_128_CBC_SHA256,\n    BR_TLS_RSA_WITH_AES_256_CBC_SHA,\n    BR_TLS_RSA_WITH_AES_128_CBC_SHA };<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>BR_TLS_RSA_WITH_AES_256_CBC_SHA256<\/code>: RSA\u9375\u4ea4\u63db\u3001AES-256-CBC\u6697\u53f7\u3001SHA-256\u30cf\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li><code>BR_TLS_RSA_WITH_AES_128_CBC_SHA256<\/code>: RSA\u9375\u4ea4\u63db\u3001AES-128-CBC\u6697\u53f7\u3001SHA-256\u30cf\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li><code>BR_TLS_RSA_WITH_AES_256_CBC_SHA<\/code>: RSA\u9375\u4ea4\u63db\u3001AES-256-CBC\u6697\u53f7\u3001SHA-1\u30cf\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li><code>BR_TLS_RSA_WITH_AES_128_CBC_SHA<\/code>: RSA\u9375\u4ea4\u63db\u3001AES-128-CBC\u6697\u53f7\u3001SHA-1\u30cf\u30c3\u30b7\u30e5<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">\u81ea\u5206\u3067\u6307\u5b9a<\/h5>\n<\/div><\/div>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-c76ec34f8c7b230f860b8b2b967356d7\"><code>  std::vector&lt;uint16_t&gt; myCustomList = { BR_TLS_RSA_WITH_AES_256_CBC_SHA256,\nBR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA };\n  client.setInsecure();\n  client.setCiphers(myCustomList);<\/code><\/pre>\n\n\n\n<p>\u4f7f\u3048\u308b\u30ea\u30b9\u30c8\u306f\u304a\u305d\u3089\u304f<a href=\"https:\/\/github.com\/esp8266\/Arduino\/blob\/master\/tools\/sdk\/include\/bearssl\/bearssl_ssl.h\" data-type=\"link\" data-id=\"https:\/\/github.com\/esp8266\/Arduino\/blob\/master\/tools\/sdk\/include\/bearssl\/bearssl_ssl.h\">\u3053\u3061\u3089<\/a>\u3002\uff08\u3055\u3089\u306b\u5236\u9650\u304b\u304b\u3063\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u7d30\u304b\u304f\u306f\u8ffd\u3063\u3066\u3044\u306a\u3044\uff09<\/p>\n\n\n\n<p>\u3061\u306a\u307f\u306b\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u306ewww.example.com\u306fsha1\u306eBR_TLS_RSA_WITH_AES_256_CBC_SHA\u3068BR_TLS_RSA_WITH_AES_128_CBC_SHA\u306f\u901a\u3058\u305f\u304csha256\u3067\u306f\u901a\u3058\u306a\u304b\u3063\u305f\u306e\u3067\u4e0a\u306e\u6307\u5b9a\u3060\u3068\u63a5\u7d9a\u30a8\u30e9\u30fc\u306b\u306a\u3063\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u3064\u306a\u3052\u308b\u30b5\u30fc\u30d0\u306e\u8a3c\u660e\u66f8\u3092\u53d6\u5f97<\/h4>\n\n\n\n<p><a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1830\" data-type=\"post\" data-id=\"1830\">\u3053\u3061\u3089<\/a>\u3092\u53c2\u7167<\/p>\n\n\n\n<p>\u5909\u6570\u540d\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u3068\u9055\u3046\u306e\u3067\u9069\u5b9c\u4fee\u6b63<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">BearSSL_CertStore.ino<\/h3>\n\n\n\n<p>\u30e2\u30b8\u30e9\u304b\u3089\u8aad\u307f\u8fbc\u3093\u3060\u30eb\u30fc\u30c8ca\u3092\u8907\u6570\u30b9\u30c8\u30a2\u3057\u3066\u4f7f\u3048\u308b\u3084\u3064\u3063\u307d\u3044\u3002\u5bb9\u91cf\u6c17\u306b\u3057\u306a\u3044\u72b6\u6cc1\u306a\u3089\u3053\u3044\u3064\u304c\u4f7f\u3044\u3084\u3059\u305d\u3046\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u8a3c\u660e\u66f8\u306e\u66f4\u65b0<\/h4>\n\n\n\n<p>\u9577\u304f\u306a\u3063\u305f\u306e\u3067<a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1879\">\u3053\u3061\u3089<\/a><\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h4 class=\"wp-block-heading\">\u8a3c\u660e\u66f8\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/h4>\n<\/div><\/div>\n\n\n\n<p>\u521d\u3081\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u7528\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3002\uff08\u624b\u9806\u306f<a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1886\" data-type=\"link\" data-id=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1886\">\u3053\u3061\u3089<\/a>\uff09<\/p>\n\n\n\n<p>IDE\u304b\u3089[<strong>Ctrl<\/strong>] + [<strong>Shift<\/strong>] + [<strong>P<\/strong>]\u304b\u3089&nbsp;\u2018<strong>Upload Little FS to Pico\/ESP8266<\/strong>\u2018&nbsp;\u3092\u9078\u629e\u3057\u3001\uff08\u30ea\u30bb\u30c3\u30c8\u30dc\u30bf\u30f3\u62bc\u3057\u305f\u308a\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u66f8\u304d\u8fbc\u307f\u30e2\u30fc\u30c9\u3067\uff09\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5b9f\u884c\u3002<\/p>\n\n\n\n<p>\u624b\u9806\u306e\u65b9\u306b\u3082\u66f8\u3044\u305f\u3051\u3069\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u30fc\u958b\u3044\u3066\u3044\u308b\u3068\u7af6\u5408\u3057\u3066\u66f8\u304d\u3053\u3081\u306a\u3044\u306e\u3067\u6ce8\u610f<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<p>\u30b5\u30a4\u30c8\u306e\u30c9\u30e1\u30a4\u30f3\u5165\u308c\u3066\u5b9f\u884c\u3002\u5927\u4f53\u306e\u5834\u5408\u3001html\u30bd\u30fc\u30b9\u306e\u8868\u793a\u304c\u30ec\u30b9\u30dd\u30f3\u30b9\u5f85\u3061\u51e6\u7406\u304c\u8db3\u308a\u306a\u304f\u3066\u3055\u308c\u306a\u3044\u3002 <a href=\"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=1853\" data-type=\"post\" data-id=\"1853\">\u89e3\u6c7a\u65b9\u6cd5<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u8ab2\u984c<\/h4>\n\n\n\n<p>Upload LittleFS\u3060\u3068\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u3059\u3079\u3066\u4e0a\u66f8\u304d\u3055\u308c\u308b\u3089\u3057\u3044\u3002\u4e00\u90e8\u5dee\u3057\u63db\u3048\u7684\u306a\u3053\u3068\u304c\u3084\u308a\u305f\u3044\u3002\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30eb\u30fc\u30c8\u76f4\u4e0b\u306ecerts.idx\u3068certs.ar\u3092\u5dee\u3057\u66ff\u3048\u305f\u3089\u3088\u3055\u305d\u3046<s>\u3060\u304ccerts.idx\u304c\u3069\u3053\u3067\u3067\u304d\u3066\u3044\u308b\u306e\u304b\u307e\u3060\u7406\u89e3\u3057\u3066\u3044\u306a\u3044<\/s>\u3002CertStore::initCertStore\u306e\u4e2d\u3067certs.idx\u4f5c\u6210\u3057\u3066\u3044\u308b\u306e\u3067certs.ar\u3060\u3051\u3055\u3057\u304b\u3048\u308c\u3070\u3088\u3055\u305d\u3046\u3002\u5931\u6557\u3057\u305f\u3089\u63a5\u7d9a\u3067\u304d\u306a\u304f\u306a\u308a\u305d\u3046\u3060\u3051\u3069\u3001\u30cd\u30c3\u30c8\u8d8a\u3057\u306b\u30d5\u30a1\u30a4\u30eb\u653e\u308a\u8fbc\u3093\u3067\u518d\u8d77\u52d5\u3068\u304b\u3082\u3067\u304d\u305d\u3046\u304b\u306a\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ESP8266HTTPClient\u3078\u306e\u9023\u643a<\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u611f\u3058\u3067cert\u3092\u8a2d\u5b9a\u6e08\u307f\u306eWiFiClientSecure\u3092HTTPClient \u306ebegin\u30e1\u30bd\u30c3\u30c9\u306b\u6e21\u3057\u3066\u3084\u308b\u3068\u52d5\u3044\u305f<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-280f27ac932095549daf4ba46bed670c\"><code>  #include &lt;ESP8266WiFi.h>\r\n  #include &lt;ESP8266HTTPClient.h>\r\n  #include &lt;CertStoreBearSSL.h>\n  (\u7565)\n  BearSSL::WiFiClientSecure *bear = new BearSSL::WiFiClientSecure();\r\n  \/\/ Integrate the cert store with this connection\r\n  bear->setCertStore(&amp;certStore);\r\n  HTTPClient https;\r\n  if(https.begin(*bear,\"https:\/\/mail.epea.co.jp\/api\/reserve_count\")){<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ee5\u4e0b\u86c7\u8db3<\/h2>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">Chatgpt\u306b\u8a00\u308f\u308c\u305f\u3051\u3069\u306a\u3055\u305d\u3046\u306a\u5974<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u7121\u3044\u3063\u307d\u3044\u59741<\/h4>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-989a77e2a1734f47d9d126f265924542\"><code>#include &lt;ESP8266WiFi.h&gt;\n#include &lt;WiFiClientSecure.h&gt;\ninclude \"x509_crt_bundle.h\"\u3000\/\/ \u3057\u3066\nWiFiClientSecure client;\nclient.setCACertBundle(x509_crt_bundle);<\/code><\/pre>\n\n\n\n<p>\u3068chatgpt\u306b\u3044\u308f\u308c\u305f\u3002\u304c\u3001<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">C:\\Users\\kitam\\Desktop\\https\\https.ino: In function 'void setup()':\nhttps:32:10: error: 'class BearSSL::WiFiClientSecure' has no member named 'setCACertBundle'\n   32 |   client.setCACertBundle(x509_crt_bundle);\n      |          ^~~~~~~~~~~~~~~\nexit status 1\n'class BearSSL::WiFiClientSecure' has no member named 'setCACertBundle'\n<\/pre>\n\n\n\n<p>\u306a\u3044\u3088\u3068\u3002<a href=\"https:\/\/github.com\/esp8266\/Arduino\/blob\/master\/libraries\/ESP8266WiFi\/src\/WiFiClientSecureBearSSL.h\">\u30bd\u30fc\u30b9<\/a>\u898b\u308b\u3068\u78ba\u304b\u306b\u3044\u306a\u3044\u3002\u306a\u304a\u3001ESP32\u306a\u3089\u3053\u308c\u3067\u52d5\u304f\u6a21\u69d8\u3002\uff08<a href=\"https:\/\/lang-ship.com\/blog\/work\/esp32root-ca-https\/\">\u53c2\u8003<\/a>\uff09<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u7121\u3044\u3063\u307d\u3044\u59742<\/h4>\n\n\n\n<pre class=\"wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color wp-elements-390d6f6386d406a44bd08e948757ff7f\"><code>#include &lt;ESP8266WiFi.h&gt;\n#include &lt;WiFiClientSecure.h&gt;\n#include \"x509_crt_bundle.h\"\u3000\/\/ \u3057\u3066\nWiFiClientSecure client;\nclient.addServerKey(x509_crt_bundle); <\/code><\/pre>\n\n\n\n<p>\u3068\u3044\u308f\u308c\u305f\u304c\u3001\u540c\u3058\u3088\u3046\u306b<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">C:\\Users\\kitam\\Desktop\\https\\https.ino: In function 'void setup()':\nC:\\Users\\kitam\\Desktop\\https\\https.ino:32:9: error: 'class BearSSL::WiFiClientSecure' has no member named 'addServerKey'\n   32 |  client.addServerKey(x509_crt_bundle);\n      |         ^~~~~~~~~~~~\n\nexit status 1\n\nCompilation error: 'class BearSSL::WiFiClientSecure' has no member named 'addServerKey'<\/pre>\n\n\n\n<p>addServerKey\u306f\u3071\u3063\u3068\u307fESP32\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u3082\u306a\u3055\u305d\u3046\u306a\u306e\u3067chatgpt\u304c\u3069\u3053\u304b\u3089\u62fe\u3063\u3066\u304d\u305f\u304b\u3088\u304f\u308f\u304b\u3089\u306a\u3044\u3002<\/p>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u3001\u8abf\u3079\u306a\u304c\u3089\u8a66\u3057\u3066\u3044\u308b\u3051\u3069chatgpt\u306b\u5b58\u5728\u3057\u306a\u3044\u30e1\u30bd\u30c3\u30c9\u8a00\u308f\u308c\u305f\u308a\u3068\u9a19\u3055\u308c\u308b\u3063\u307d\u3044\u306e\u3067\u30e1\u30e2\u3092\u6b8b\u3059\u3002\u7d42\u4e86 ESP8266(ESP-WROOM-02)\u306e\u5185\u5bb9\u3002ESP-WROOM-32\u3067\u306f\u306a\u3044\u306e\u3067\u6ce8\u610f\u3002 \u74b0\u5883 \u52d5\u304d\u305d\u3046\u306a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[123,132],"class_list":["post-1807","post","type-post","status-publish","format-standard","hentry","category-117","tag-esp","tag-esp-wroom-02"],"_links":{"self":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1807"}],"version-history":[{"count":33,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1807\/revisions"}],"predecessor-version":[{"id":1930,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/1807\/revisions\/1930"}],"wp:attachment":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}