502 잘못된 게이트웨이 - 자체 서명된 인증서 체인

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

클라이언트 애플리케이션은 Edge Micro Gateway의 API 호출에 대한 응답으로 Bad Gateway 메시지와 함께 HTTP 응답 코드 502을 수신합니다.

또는 관리자가 edgemicro configure 명령어를 실행할 때 self signed certificate in certificate chain 오류가 발생합니다.

오류 메시지

클라이언트에 다음과 같은 응답 메시지가 표시됩니다.

HTTP/1.1 502 Bad Gateway

오류 응답의 두 가지 일반적인 예는 다음과 같습니다.

{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}

또는 edgemicro configure를 실행할 때 이 오류가 발생할 수 있습니다.

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

가능한 원인

원인 설명 다음에 관한 문제 해결 안내
대상 서버가 자체 서명 인증서를 제공함 Edge Micro Gateway는 대상 서버의 인증서를 확인하며, 신뢰할 수 없는 경우 런타임 오류가 발생합니다. Edge 퍼블릭 및 프라이빗 클라우드 사용자
Apigee Edge 관리 서버에서 자체 서명된 인증서 사용 Edge Micro Gateway를 처음 구성할 때는 TLS를 통해 Apigee Edge에 연결하여 부트스트랩합니다. Edge에서 자체 서명 인증서를 제공하면 실패합니다. Edge Private Cloud 사용자

원인: 대상 서버가 자체 서명된 인증서를 제공합니다.

남쪽 경계 연결에서 대상 서버가 자체 서명된 인증서를 제공하는 경우 Edge Micro Gateway는 자체 서명된 인증서를 신뢰하지 않으므로 기본적으로 이 오류가 발생합니다.

진단

로그에 다음 오류가 표시될 수 있습니다 (/var/tmp/edgemicro-`hostname`- *.log).

2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80-
b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate
chain][SELF_SIGNED_CERT_IN_CHAIN][]

오류 코드 SELF_SIGNED_CERT_IN_CHAIN는 Edge Micro Gateway가 대상 서버로부터 자체 서명된 인증서를 받았을 가능성이 매우 높음을 나타냅니다. 이를 확인하려면 다음 단계를 따르세요.

  1. 다음 openssl 명령어를 실행하여 대상 서버의 인증서 체인을 확인합니다.
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. 대상 서버의 인증서 체인이 실제로 자체 서명된 경우 이것이 문제의 원인입니다.

    다음 예에서 대상 서버가 자체 서명된 인증서를 제공합니다.

    echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
    
    depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    DONE
    

해상도

  1. 대상 서버를 소유한 팀과 협력하여 신뢰할 수 있는 인증 기관 (CA)에서 서명한 적절한 TLS 인증서를 확보합니다.
  2. 그럴 수 없다면 다음 옵션 중 하나를 사용하여 Edge Micro Gateway에서 자체 서명 인증서를 허용하는 것이 좋습니다.

    옵션 #1: Edge Micro Gateway가 모든 인증서를 신뢰하도록 시스템 속성 설정

    1. Docker를 사용하는 경우 Node.js에서 신뢰하지 않는 CA 사용을 참조하세요.
    2. 그렇지 않은 경우 루트 CA 파일을 가리키는 NODE_EXTRA_CA_CERTS라는 환경 변수를 내보냅니다.

      자세한 내용은 공식 Node.js 웹사이트에 설명되어 있습니다.

    옵션 #2: 대상 서버의 특정 인증서를 신뢰하도록 Edge Micro Gateway YAML 구성 파일 구성

    1. 대상 서버의 인증서 (또는 체인)가 PEM 형식이어야 합니다. 다른 인증서 형식을 PEM으로 변환하려면 인증서를 지원되는 형식으로 변환의 안내를 따르세요.
    2. 인증서 체인이 있는 경우 인증서 순서가 올바른지 확인합니다. 리프 인증서가 항상 먼저 표시되고 그 뒤에 중간 인증서, 루트 인증서가 차례로 와야 합니다. 이에 관한 자세한 내용은 인증서 체인 유효성 검사를 참고하세요.

      다음 예에서는 untrusted-root.badssl.com에 대해 신뢰할 수 있는 CA 파일을 구성했습니다.

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem
      

    이를 구성하는 방법에 대한 안내는 Edge Micro Gateway 모듈 - 남쪽 방향 단방향 및 양방향 TLS 구성 동영상에서도 다룹니다. 자세한 내용은 Edge Microgateway 서버에서 SSL 구성을 참조하세요.

문제가 계속되면 진단 정보를 수집해야 하는 경우로 이동하세요.

원인: Apigee 에지 관리 서버가 자체 서명 인증서를 사용합니다.

Edge Micro Gateway를 처음 설정할 때 실행해야 하는 명령어 중 하나는 edgemicro configure 또는 edgemicro private configure입니다. 이 명령어는 클러스터를 부트스트랩하고 Apigee Edge에 연결하여 필요한 정보를 다운로드합니다.

Edge Private Cloud의 경우 관리 서버 URL은 -m 인수로 결정됩니다. 관리 서버에 TLS를 사용 설정하면 Edge Micro Gateway가 관리 서버에서 제공하는 인증서를 확인하려고 시도합니다.

Edge Private Cloud의 edgemicro configure 명령어 예시는 다음과 같습니다.

edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443

관리 서버가 자체 서명된 인증서로 구성된 경우 콘솔 출력에 다음 오류가 표시됩니다.

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

진단

  1. 이 경우 관리 서버(management.apigee-dev.net)가 자체 서명 TLS 인증서를 반환할 수 있습니다.
  2. Apigee Edge 시스템 관리자가 인증서를 제공하고 사본을 가지고 있을 가능성이 높습니다.
  3. 그렇지 않으면 다음 명령어를 실행하여 인증서에 대한 정보를 가져옵니다.
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. 관리 서버에 자체 서명된 인증서가 있는 경우 이로 인해 문제가 발생합니다.

해상도

  1. 대상 서버를 소유한 팀과 협력하여 신뢰할 수 있는 인증 기관 (CA)에서 서명한 적절한 TLS 인증서를 확보합니다.
  2. 그럴 수 없다면 다음을 수행하여 Edge Micro Gateway에서 자체 서명된 인증서를 허용합니다.

  3. Edge Micro Gateway가 모든 인증서를 신뢰하도록 시스템 속성을 설정합니다.
  4. Docker를 사용하는 경우 Node.js에서 신뢰하지 않는 CA 사용을 참조하세요.
  5. 그렇지 않은 경우 루트 CA 파일을 가리키는 NODE_EXTRA_CA_CERTS라는 환경 변수를 내보냅니다.이 내용은 공식 Node.js 웹사이트에 설명되어 있습니다.

진단 정보 수집 필요

위의 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 다음 Apigee Edge 지원팀에 문의하세요.

  • 로그 파일: 기본 폴더는 /var/tmp이지만 기본 config.yaml 파일 (logging > dir parameter)에서 재정의될 수 있습니다. Apigee Edge 지원에 로그 파일을 제공하기 전에 log > levelinfo로 변경하는 것이 좋습니다.
  • 구성 파일: Edge Microgateway의 기본 구성은 기본 Edge Microgateway 폴더인 $HOME/.edgemicro의 YAML 파일에 있습니다. default.yaml라는 기본 구성 파일이 있으며 ORG~ENV~config.yaml 환경별로 하나씩 있습니다. 영향을 받는 조직 및 환경에 이 파일 전체를 업로드하세요.

    참조 문서

    TLS를 사용하여 Edge API에 액세스하도록 Edge UI 구성