Как мне доверять самозаверяющему сертификату из электронного приложения?

У меня есть электронное приложение, которое синхронизируется с моим сервером по адресу 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')
Другие вопросы по тегам