Проблема Esp32 Https
Я работаю над проектом, в котором я должен отправить запрос GET на Https-сервер моей компании. Я успешно отправил запрос GET с помощью NodeMCU v 1.0 (ESP 12E). Библиотека Arduino NodeMCU 1.0 (ESP 12E) использует отпечаток пальца SSL-сертификата ,имя хоста и URL-адрес для отправки запроса GET. на этом сайте легко найти отпечаток пальца сертификата -> https://www.grc.com/fingerprints.htm
Но в библиотеке ESP 32 Arduino я должен передать SSL - сертификат . Я понятия не имею, как найти SSL-сертификат веб-сайта моей компании.
Формат SSL-сертификата, используемого в библиотеке ESP 32 Arduino, приведен ниже :
/*
const char* ca = \
"-----BEGIN CERTIFICATE-----\n" \
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" \
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" \
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" \
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" \
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" \
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" \
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" \
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" \
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" \
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" \
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" \
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" \
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" \
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" \
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" \
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" \
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" \
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" \
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" \
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" \
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" \
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" \
"-----END CERTIFICATE-----\n";
*/
Есть ли простой способ найти SSL-сертификат любого веб-сайта, который использует Https вместо простого http ?
Заранее спасибо
@paras bhanot, 👍2
3 ответа
Лучший ответ:
в хроме:
- нажмите [F12]
- перейдите на вкладку "Безопасность".
- нажмите кнопку "Просмотреть сертификат" в разделе "Обзор безопасности".
- перейдите на вкладку "сведения" во всплывающем окне "Сертификат".
- нажмите кнопку "Скопировать в файл...".
- нажмите кнопку "Далее".
- проверьте опцию "base64 encoded x509".
- нажмите кнопку "Далее".
- нажмите кнопку "Обзор" и выберите папку для экспорта
- введите имя файла в отведенное место
- нажмите кнопку "Далее".
- нажмите кнопку "Готово".
- перейдите в папку и откройте экспорт с помощью текстового редактора
Файл экспорта имеет тот же формат, вам просто нужно преобразовать его в литерал C с использованием косых черт и кавычек в конце строки-упражнение, с которым я вам позволю справиться. Возможно, есть какой-то причудливый инструмент, который делает все это за вас, я бы хотел услышать об одном из них, но я знаю, что это довольно универсальный способ сделать это.
Возможно использование, например, openssl. Команда может идти так из оболочки:
openssl s_client -showcerts -имя_сервера www.theserver.io -подключение www.theserver.io:443 -certform DER
Включая >mycertif.der
в конце команды, вы получаете информацию в файле, так что вы можете вырезать и вставить эту часть вывода команды.
Лучшие,
Даже если это старый вопрос... Я предлагаю не полагаться на методы, описанные здесь. Конечно, вы можете получить SSL-сертификат из браузера и скопировать его в свой код. Но каждый раз, когда сервер будет обновлять сертификат, ключ меняется! Если у вас есть "бесплатный" сертификат, как у Let's Encrypt, используемый, например, на всех общих хостингах всех крупных веб-хостинговых компаний, ключ будет меняться каждые... 3 месяца! Таким образом, вам придется обновлять свой ESP-код каждые 3 месяца... Для целей тестирования это нормально, но для реального "приложения" это не очень хороший вариант.
Итак,как мы можем это сделать?
Вариант 1: добавьте модуль на свой веб-сервер, позволяющий иметь заранее определенный SSL-ключ. Вы просто устанавливаете ключ для определенной папки и копируете его в свой ESP. Мой сервер - Apache, и кажется, что эти модули не существуют для Apache.
Варианты 2: отредактируйте Apache conf (обычно по адресу etc/apache2/) для вашего сервера. Во многих случаях каждый раз, когда клиент обращается к вашему серверу с помощью http, Apache меняет вызов на https.
Это делается с помощью правила перезаписи. Вы можете изменить это следующим образом:RewriteCond %{HTTPS} off RewriteCond %{THE_REQUEST} !/XXXXXX [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} on RewriteCond %{THE_REQUEST} /XXXXXX [NC] RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
где XXXX - имя папки, в которую вы поместите скрипт, вызванный вашим ESP. При этом все папки на вашем сайте используют https, кроме той, которую вы используете с вашим ESP. Конечно, это означает, что ваш вызов ESP выполняется с использованием http, а не https, но во многих случаях мы должны использовать ESP+https не по соображениям безопасности, а потому, что веб-сайт находится в https.
- Драйверы для чипа последовательного порта CH9102X
- ESP32: отключить детектор отключения питания
- Преобразование строки в IP-адрес
- Какую плату выбрать в PlatformIO для ESP Wroom 32?
- esp32 Stack canary watchpoint срабатывает
- Постоянная частота дискретизации АЦП на ESP8266 или ESP32
- ESP32S v1.1 NodeMCU vs ESP32 DevKitV1
- esp32-cam публикует изображение в mqtt