Неправильный TLS с RESTDataSource от Apollo и HttpsProxyAgent

#node.js #proxy #openssl #apollo #http-proxy

#node.js #прокси #openssl #apollo #http-прокси

Вопрос:

Я настраиваю связь между моим сервером Apollo (Node) и REST API. Моя конечная точка является https://app.myproject.local/api/v1 и обслуживается через Hotel через файл Pacfile, доступный с http://localhost:2000/proxy.pac .

На самом деле эта конечная точка также доступна с http://localhost:4000/api/v1 , но я хочу получить к ней доступ с помощью Hotel.

Я полагал, что app.myproject.local не было бы решено, если бы я попытался получить к нему доступ непосредственно в приложении узла, поэтому я должен пройти через HttpsProxyAgent и получить его оттуда.

 import { RESTDataSource } from 'apollo-datasource-rest'
import HttpsProxyAgent from 'https-proxy-agent'
import { restConfig } from '../config/restConfig'

export class RestAPI extends RESTDataSource {
  constructor() {
    super()
    this.baseURL = restConfig.endpoint
  }

  public willSendRequest(request: any) {
    request.agent = new HttpsProxyAgent({
      host: 'localhost',
      port: 2000,
      secureProxy: false,
      rejectUnauthorized: false,
    })
  }

  public async test() {
    return this.get('/status')
  }
}
  

Несмотря на наличие rejectUnauthorized , выдает ошибку

 (node:40593) UnhandledPromiseRejectionWarning: FetchError: request to https://app.myproject.local/api/v1/organizations/current failed, reason: write EPROTO 4474312128:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
  

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

 curl --insecure --proxy http://localhost:2000/proxy.pac https://app.myproject.local/api/v1/status
  

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

Я использую документацию https://node.readthedocs.io/en/latest/api/tls/#tlsconnectport-host-options-callback чтобы помочь мне передать аргументы в HttpsProxyAgent

Ответ №1:

 const https = require('https')

...
  willSendRequest(request) { 
    request.agent = new https.Agent({ rejectUnauthorized: false })
  }
...

  

Ответ №2:

proxy.pac — это файл, который сообщает веб-браузеру, какой прокси использовать для данного запроса. Обычно вы не используете его как прокси-сервер.