Macを使ってSSL化しているWebサイトのルート証明書をpem形式で保存する方法
現在、ESP32を使ってYahoo!の気象情報APIを使いたいなぁと思っています。
developer.yahoo.co.jp
Arduino core for the ESP32を使っているので、YahooのWebAPIにアクセスするにはWifiClientSecureライブラリを使います。
色々調べると、YahooのWebAPIは常時SSLになっています。WifiClientSecureを使うにはサイトのルート証明書のデータを設定しなければなりません。
Macを使ってSSL化しているWebサイトのルート証明書をpem形式で保存する方法
- デベロッパーツールから「Security」を選択する
- Securityから「View certificate」ボタンを押下する
- 「Baltimore CyberTrust Root」から発行されていることを確認
- 「キーチェーン」を起動して「Baltimore CyberTrust Root」を検索
- 「Baltimore CyberTrust Root」のコンテキストメニューを表示して、「"Baltimore CyberTrust Root"を書き出す...」を選択
- フォーマットを「pem形式」に変更
- 保存ボタンを押下する
こいつをソースコードに埋め込んでWifiClientSecureライブラリに渡してやるとSSL通信が出来ます。
const char* yahooapi_root_ca= \ "-----BEGIN CERTIFICATE-----\n" \ "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \ "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \ "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \ "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \ "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \ "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \ "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \ "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \ "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \ "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \ "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \ "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \ "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \ "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \ "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \ "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \ "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \ "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \ "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \ "-----END CERTIFICATE-----\n";
WiFiClientSecure client; setup(){ client.setCACert(yahooapi_root_ca);