Когда небезопасные ответы и прозрачность сертификата полностью ломают 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 г.