Когда небезопасные ответы и прозрачность сертификата полностью ломают Electron

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

Я просто хотел сказать — не вини меня, это не моя вина.

Почему мой Электрон перестал работать?

Если вы попытались использовать свое приложение, созданное с помощью Electron, вы, скорее всего, открыли его только для того, чтобы увидеть пустой пустой экран:

Если бы в вашем приложении были включены инструменты разработчика, вы могли бы быстро увидеть, что именно пошло не так:

Не удалось загрузить ресурс: net::ERR_INSECURE_RESPONSE

Что случилось? Ваши сертификаты были все в порядке, ваш сайт вчера нормально грузился по https, все было правильно в мире. И все же вы стояли здесь, и Электрон ясно дал вам понять, что, возможно, вы не были гуру безопасности, каким вы себя считали.

Вы будете счастливы узнать, что все сделали правильно, и что это вовсе не ваша вина.

Хром, у тебя есть кое-что, что нужно сделать.

Как вы, наверное, знаете, Electron имеет внутреннюю зависимость от Chrome, чтобы обрабатывать все его возможности, связанные с Интернетом, такие как рендеринг. Что ж, иногда люди ошибаются. Ошибки случаются, и это именно то, что здесь происходит.

Если ваш центр сертификации SSL/TLS был одним из следующих объектов, вы, вероятно, столкнулись с этой проблемой:

  • Симантек
  • ГеоТраст
  • Тауте

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

Это может объяснить, почему без каких-либо изменений ваше приложение Electron просто перестало работать.

Если вы столкнулись с этой проблемой и обнаружили, что ваше приложение не работает, вам просто нужно обновить Electron до последней версии (или, по крайней мере, более поздней версии, чем 1.4.12).

Как правило, это можно сделать с помощью быстрого обновления npm:

npm update electron

После обновления пакета вы сможете пересобрать приложение и распространять его, как и ожидалось:

Несколько других более гетто-подходов к решению этой проблемы заключаются в том, чтобы либо явно отключить недействительные сертификаты в вашем приложении Electron, что можно сделать с помощью следующей строки в вашем файле main.js:

app.commandLine.appendSwitch('ignore-certificate-errors');

Или отключив веб-безопасность, что гарантирует, что незащищенный трафик не будет обслуживаться:

// Create the browser window. mainWindow = new BrowserWindow({ width: 1024, height: 768, icon: __dirname + '/favicon.ico', // This handles disabling web security webPreferences : { webSecurity: false } })

Опять же, рекомендуется просто обновить Electron, но вполне вероятно, что эти обходные пути также технически решат проблему.

Первоначально опубликовано на rion.io 17 января 2017 г.