it-source

호스트: localhost.증명서의 alt name에 없습니다.

criticalcode 2023. 4. 6. 21:44
반응형

호스트: localhost.증명서의 alt name에 없습니다.

서버측 렌더링중에 다음의 에러가 발생.

RENDERING ERROR: { [Error: Network error: request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn't match certificate's altnames: "Host: localhost. is not in the cert's altnames: DNS:*.xyz.io"]
  graphQLErrors: null,
  networkError: 
   { [FetchError: request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn't match certificate's altnames: "Host: localhost. is not in the cert's altnames: DNS:*.xyz.io"]
     name: 'FetchError',
     message: 'request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn\'t match certificate\'s altnames: "Host: localhost. is not in the cert\'s altnames: DNS:*.xyz.io"',
     type: 'system',
     errno: undefined,
     code: undefined },
  message: 'Network error: request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn\'t match certificate\'s altnames: "Host: localhost. is not in the cert\'s altnames: DNS:*.xyz.io"',
  extraInfo: undefined }

주의: react, redux, apollo-client(GraphQL) 및 Express를 사용하고 있습니다.JS(NodeJS)요청처의 API 서버가 다른 도메인에 있어서 변경할 수 없습니다.

클라이언트 사이드 렌더링을 사용하는 동안 모든 것이 의도한 대로 작동하고 있지만 서버 사이드 렌더링을 수행하는 동안 위의 오류가 발생합니다.

그래서 나는 내 서버에서 아래의 방법을 시도했지만, 여전히 성공하지 못했다.

  1. 자기서명증명서

  2. https 옵션에 'rejectUnauthorized' 추가: false.

    const options = {
      'key': key,
      'cert': cert,
      'ca': [ fs.readFileSync('local-certificate.pem') ],
      'rejectUnauthorized':false
    };
    
    https.createServer(options, app).listen(httpsPort, '0.0.0.0', function onStart(err) {
      if (err) { console.log(err); }
      console.info('==> Listening on httpsPort %s. Open up http://0.0.0.0:%s/ in your browser.', httpsPort, options);
    });
    
  3. 또한 "Subject를 사용하여 자기 서명 증명서를 생성하는 방법"을 사용하여 자기 서명 증명서에 alt 이름을 추가하려고 했습니다.OpenSSL을 사용하는 AltName?

express 서버가 유효한 증명서를 사용하여 다른 도메인에 있는 API 서버에 요청을 할 수 있도록 증명서 검증을 우회하는 방법이 있습니까?

익스프레스 서버에서 변경을 가하여 수정할 수 있을지 어떨지 아직 잘 모르겠습니다.

이에 대한 통찰력을 알려주세요.

이 에러는, 질문의 코드에 의한 것이 아닙니다.

이 작업은 새로운 HTTP 서버를 만들고 있습니다.이 서버를 리슨합니다.httpsPort와 결합할 것이다.0.0.0.0즉, 모든 로컬 IP 주소를 의미합니다.

생략하는 것이 좋습니다.0.0.0.0이 동작은 기본 동작이기 때문에 모든 로컬 IP 주소에 바인드 할 수 있습니다.단, 문제가 되지 않습니다.

그런 다음 이 서버에 인증서를 할당합니다.local-certificate.pem즉, 이 서버에 접속하고 있는 클라이언트에 이 증명서가 제시됩니다.

코드의 이 부분에서는 외부 API에 접속하고 있지 않습니다.

마이클 랜디스는 이 점을 이해시키려고 노력했지만 해결책을 제시하지는 못했습니다.서비스가 192.168.100.100 위의 로컬에서 실행되고 있는 경우 호스트 파일(Linux의 /etc/hosts 등)에 있어야 합니다.

192.168.100.100 api-dev.xyz.io

SSR 중에라도 현재 실패한 요청은 api-dev.xyz.io으로 수행해야 합니다."http[s]://localhost/..."에 대한 요청을 피하는 것이 훨씬 쉽습니다.

이 에러 메시지는, https://api-dev.xyz.io/graphql 의 서버가, 착신 요구가 https://localhost/graphql 에 송신되고 있는 것을 인식하고 있는 것을 나타내고 있습니다.따라서 SSL 증명서가 https://localhost/를 보호하지 않기 때문에 실패합니다.

서버측 렌더링이 서버측 렌더링을 실행하고 있는 서버와 같은 서버에 대해 fetch/API 콜을 실행하여 렌더용 초기 데이터를 로드하려고 하는 경우가 있습니까?만약 그렇다면, 클라이언트가 API에서 필요로 하는 초기 데이터는 React가 서버측 렌더링에서 API 호출을 실행하는 대신 서버측 렌더링에 직접 전달될 수 있을까요?

튜토리얼은 참조 예시로 사용할 수 있습니다.

호스트 이름은 NodeJS 아래의 시스템 수준 설정입니다.노드 복사본의 박스/VM에 액세스할 수 있어야 합니다.JS가 실행 중입니다.

언급URL : https://stackoverflow.com/questions/42133734/host-localhost-is-not-in-the-certs-altnames

반응형