Проблема 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 ?

Заранее спасибо

, 👍2


3 ответа


Лучший ответ:

0

в хроме:

  • нажмите [F12]
  • перейдите на вкладку "Безопасность".
  • нажмите кнопку "Просмотреть сертификат" в разделе "Обзор безопасности".
  • перейдите на вкладку "сведения" во всплывающем окне "Сертификат".
  • нажмите кнопку "Скопировать в файл...".
  • нажмите кнопку "Далее".
  • проверьте опцию "base64 encoded x509".
  • нажмите кнопку "Далее".
  • нажмите кнопку "Обзор" и выберите папку для экспорта
  • введите имя файла в отведенное место
  • нажмите кнопку "Далее".
  • нажмите кнопку "Готово".
  • перейдите в папку и откройте экспорт с помощью текстового редактора

Файл экспорта имеет тот же формат, вам просто нужно преобразовать его в литерал C с использованием косых черт и кавычек в конце строки-упражнение, с которым я вам позволю справиться. Возможно, есть какой-то причудливый инструмент, который делает все это за вас, я бы хотел услышать об одном из них, но я знаю, что это довольно универсальный способ сделать это.

,

1

Возможно использование, например, openssl. Команда может идти так из оболочки: openssl s_client -showcerts -имя_сервера www.theserver.io -подключение www.theserver.io:443 -certform DER

Включая >mycertif.der в конце команды, вы получаете информацию в файле, так что вы можете вырезать и вставить эту часть вывода команды. Лучшие,

,

1

Даже если это старый вопрос... Я предлагаю не полагаться на методы, описанные здесь. Конечно, вы можете получить 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.

,