Please enable JavaScript to view the comments powered by Disqus.Copilot Error: unable to get local issuer certificate 에러 해결하기 (회사에서 copilot, intellij 사용하기, 로그인이 안될 때)
Search

Copilot Error: unable to get local issuer certificate 에러 해결하기 (회사에서 copilot, intellij 사용하기, 로그인이 안될 때)

태그
Github
Enterprise
Copilot
Error
공개여부
작성일자
2024/02/21
최근 회사에서 copilot 을 지원해주고 베타 테스터로 참여하게 되서 copilot을 연동하며 발견한 unable to get local issuer certificate 이슈를 해결하고자 한다.
Copilot을 intellij 에 적용하면 8자리 코드를 입력하고
Authorize github copilot plugin 버튼을 클릭한 다음 아래와 같은 화면에서 어떠한 변화도 없다..
처음엔 시간이 걸리는건가 하여 점심 먹기 전에 걸어두고 점심머고 다녀왔는데도 이 화면에 그대로 유지되었다.

원인 특정

무엇을 고쳐야 하는지 알아내기 위해서 IntelliJ의 로그를 열어보자.
IntelliJ 에서 발생한 로그는 여기서 확인할 수 있다.

로그 레벨 설정

하지만, 풍성한 로그 확인을 위해 다음을 설정해두자.
이와같이 로그를 설정하고 IntelliJ을 껏다가 켜면 다시 code를 입력하는 화면이 나오게 된다.

재현

그리고 다시한번 device 등록 절차를 수행한다. (재현)
다시 이 화면에 나오는 상황이 되면 로그에 뭐가 원인인지 나올 것이다.

로그 분석

우리의 목표는 copilot 과 github 간 연동이 왜 안되는 것인지 그래서 어느 부분에 error가 발생한 것인지 확인하는 것이다.
따라서 방대한 로그에 압도 당하지 않고 “error” 를 검색하면 에러 부분을 찾을 수 있다.
2024-02-22 10:58:35,164 [37017228] FINER - #com.github.copilot.lang.agent.vscodeRpc.AgentProcessHandler - [stderr] ApplicationInsights:Sender [ 'Ingestion endpoint could not be reached. This batch of telemetry items has been lost. Use Disk Retry Caching to enable resending of failed telemetry. Error:', [ "[object Error]{ stack: 'Error: unable to get local issuer certificate\n" + ' at TLSSocket.onConnectSecure (node:_tls_wrap:1533:34)\n' + ' at TLSSocket.emit (node:events:537:28)\n' + ' at TLSSocket._finishInit (node:_tls_wrap:947:8)\n' + " at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:728:12)', message: 'unable to get local issuer certificate', name: 'Error'" ] ]
Plain Text
복사
필자의 케이스는 이것이 원인이다.
여기서 얻을 수 있는 정보는 다음과 같다.
1.
TLSSocket 연결을 하며
2.
이를 실행하는 language는 typescript(node) 이다.
3.
Handshake 과정에서 certificate 를 local에서 가져오는 것을 실패했다.
이 문제는 Github 에서 친절히 설명한다.
이 페이지 캡쳐 화면이다.
Copilot 에 대해 Network errors 라는 카테고리가 따로 있는 것으로 봐선 기업에서 copilot을 사용하면 이와 같은 문제가 자주 발생하는 것으로 추측할 수 있다.

문제 해결

이와 관련있는 해결 방법은 여기서 확인할 수 있다.
1.
회사에 인증서에 대해 문의하고 인증서를 받아두자.
2.
Node 설치

발생 원인

Copilot plugin 은 typescript로 만들어졌다.
즉, Node 에서 github의 API들을 호출할 때 cert를 확인하는 과정이 필요하다.
회사가 계약된 보안 업체의 인증서를 설치하고
이 cert 에 대한 환경 변수를 명시해줘야 한다.
필자는 이 과정을 ~/.zshrc 에 명시하여 해결하려고 했지만, 해결되지 않는다. 이유는 intelliJ의 Node 환경을 편집해야 하기 때문이다.
아마 nvm을 설치하여 여러 node 버전을 다루기 때문으로 보인다.
로컬에 node가 하나만 있다면 ~/.zshrc 에서 충분히 관리할 수 있을 것이다.

인증서 IntelliJ에 명시하기

Command + , 로 setting에 들어가면 Tools → Server certificates 가 있다.
여기에 사용하는 인증서를 등록한다.

IntelliJ 환경에 Node 환경변수 변경하기

Node 에서 certtification 환경변수는 NODE_EXTRA_CA_CERTS 라는 환경변수를 통해 명시할 수 있다.
인증서가 설치된 path의 절대경로를 아래와 같이 입력한다.
Appearance & Behavior 로 진입하여 Path variables 에 NODE_EXTRA_CA_CERTS 를 추가한다.
Name: NODE_EXTRA_CA_CERTS
Value: /Users/username/path/cert/cert-filename.extension

해결

여기서 중요한 것은 이 환경 변수가 working 하기 위해서 IntelliJ를 다시 실행시켜줘야 한다.
그리고 github copilot 에 로그인하면 다음과 같은 메시지를 확인할 수 있다.
Successfully logged in to Github for Github Copilot.