Как вы отправляете самозаверяющие сертификаты с модулем electronic-fetch в Node.js? - PullRequest
0 голосов
/ 08 января 2020

В настоящее время у меня есть приложение Electron, которое извлекает данные из конечной точки API. Первоначально этот первичный URL для этой конечной точки выглядел примерно как http://my-service.com/info/otherstuff. Я использовал NPM модуль electron-fetch для извлечения своих данных, чтобы я мог использовать их для других целей.

Недавно я решил изменить свой сервис с publi c на частный, поэтому я сгенерировал сертификаты (crt, pem, key и т. д. c.) и изменил http://my-service.com/info/otherstuff на https://my-service.com/info/otherstuff в моем коде. Как и ожидалось, этого изменения было недостаточно, чтобы новый URL работал в приложении. Мой текущий код выглядит примерно так:

fetch = require('electron-fetch').default

class InfoIWant {
  constructor () {
    this.url = "http://my-service.com/info/otherstuff"
    this.options = {
      method: 'GET',
      headers: {
        pragma: 'no-cache',
        'cache-control': 'no-cache'
      }
    }
  }

  _fetchData(onInit){
    return fetch(this.url, this.options)
      .then(async resp => {
          console.log("This worked!");
      }).catch(err => {
          console.log("This didn't work...");
      })
  }
}

Это прекрасно работает, когда я звоню this._fetchData(true).

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

fetch = require('electron-fetch').default

class InfoIWant {
  constructor () {
    this.url = "https://my-service.com/info/otherstuff"
    this.options = {
      method: 'GET',
      headers: {
        pragma: 'no-cache',
        'cache-control': 'no-cache'
      }
      ca: fs.readFileSync(path.resolve(__dirname, "<PATH TO LOCAL CERTIFICATE>")
      cert: fs.readFileSync(path.resolve(__dirname, "<PATH TO LOCAL CERTIFICATE>")
    }
  }

  _fetchData(onInit){
    return fetch(this.url, this.options)
      .then(async resp => {
          console.log("This worked!");
      }).catch(err => {
          console.log("This didn't work...");
      })
  }
}

Внесение этого изменения приводит к зависанию приложения. Я попытался добавить тайм-ауты, и, как и предполагалось, он просто зависает и время ожидания. Как именно вы отправляете самозаверяющие сертификаты с модулем electron-fetch? Это вообще возможно? Буду признателен за помощь в решении этой проблемы!

...