Как мне доверять самозаверяющему сертификату из электронного приложения?
У меня есть электронное приложение, которое синхронизируется с моим сервером по адресу https://XXX.XX.XX.XXX:port который имеет самозаверяющий сертификат. Как я могу доверять этому сертификату из моего электронного приложения?
Прямо сейчас я получаю:
Failed to load resource: net::ERR_INSECURE_RESPONSE
5 ответов
Вам нужно поместить следующий код в ваш файл "shell" (core Electron init):
// SSL/TSL: this is the self signed certificate support
app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
// On certificate error we disable default behaviour (stop loading the page)
// and we then say "it is all fine - true" to the callback
event.preventDefault();
callback(true);
});
Но вы разрешаете небезопасные (недействительные) сертификаты, такие как самоподписанные.
Обратите внимание, что это НЕ безопасный способ подключения к серверу.
Для получения дополнительной информации вы можете проверить документацию: https://electron.atom.io/docs/api/app/
Подписаться на certificate-error
событие, излучаемое app
модуль и проверьте свой самозаверяющий сертификат в обработчике событий.
Попробуйте это, если 'certificate-error'
событие не работает:
if (process.env.NODE_ENV === 'DEV') {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
}
Похоже, вы также можете настроить это на стороне BrowserWindow вашего скрипта запуска электронного устройства с помощью setCertificateVerifyProc(). Я не мог заставить работать ни один из вышеперечисленных методов, по крайней мере, в Electron 10.4.4.
например
var win = new BrowserWindow({
...
});
win.webContents.session.setCertificateVerifyProc((request, callback) => {
var { hostname, certificate, validatedCertificate, verificationResult, errorCode } = request;
// Calling callback(0) accepts the certificate, calling callback(-2) rejects it.
if (isNotMyCertificate(certificate)) { callback(-2); return; }
callback(0);
});
Где isNotMyCertificate() проверяет, что данные в сертификате принадлежат вам. console.log(), чтобы узнать структуру сертификата. Это дает вам немного больше контроля над безопасностью, чем полное разрешение всех сертификатов.
См. SetCertificateVerifyProc () в https://www.electronjs.org/docs/api/session#sessetcertificateverifyprocproc для получения дополнительных сведений.
В файле записи приложения выполните:
const { app } = require('electron')
app.commandLine.appendSwitch('ignore-certificate-errors')