::: IT인터넷 :::

APT 설치할때 발생하는 인증서 오류 원인과 해결방법

곰탱이푸우 2022. 1. 3. 08:20
2021년 10월 1일부터  사설 저장소를 이용한 우분투의 APT 설치 과정에서 오류가 발생했다.
사설 저장소는 Synology NAS에 NEXUS를 설치하고 Let's Encrypt 인증서를 적용하여 사용 중이다.

 

APT 패키지를 설치할 때 나타나는 Nexus 인증서 오류 증상은 다음과 같다.
 

 

Certificate verification failed: The certificate is NOT Trusted. 메시지가 출력된다.
그 다음 메시지가 중요한데 The certificate chain uses expires cerificate. 라고 출력되며, 인증서에 적용 된 타기관 서명이 유효하지 않다는 것을 의미한다.
일반적으로 인증서는 신뢰성을 보증하는 제3기관 또는 상위 기관의 인증서의 서명이 포함되어 있는데 해당 서명이 유효하지 않아 발생하는 것으로 추정할 수 있다.
 
 

원인

해당 정보를 기반으로 구글링을 해보니, 가장 큰 원인은 Let's Encrypt의 루트 인증서인 DST Root CA의 유효기간이 9월 30일에 만료되어 발생한 것으로 확인된다.
내용을 요약하면 그동안 ISRG Root X1 인증서와 교차 인증이 적용되었으나, 이제 구형 안드로이드 기기를 제외하고 DST Root CA 인증서를 폐기했다는 것이다.
 
오류가 발생한 원인은 시스템에 저장 된 인증서에 포함 된 루트 인증서가 만료되어, 해당 루트 인증서로 서명된 인증서도 유효성을 검증할 수 없어서 발생했다.
로컬에 저장 된 인증서는 예전 인증서이므로 신규 인증서로 갱신 된 사설 저장소에 인증을 할 수 없고, 이로 인해 변경 된 인증서 정보를 가져올 수 없어서 오류가 발생하는 것이다.
 

해결방법

해결 방법은 의외로 간단하다. ca-certificate 패키지를 설치하면 된다.
해당 패키지를 설치하면 문제가 되는 루트 인증서 정보를 갱신하기 때문이다.

 

설치하는 방법은 크게 두 가지가 있다.
  1. 해당 패키지를 직접 다운 받아 설치하는 방식
  2. APT 저장소 경로를 공식 저장소로 변경해서 설치하는 방식
 
두 방식 모두 인터넷에 연결되어 있어야 한다.
 
인터넷 연결이 안되는 곳은 첫 번째 방식을 이용할 수 있다.
인터넷 환경에서 설치 파일을 다운로드 하고, 인터넷이 안되는 곳으로 파일을 옮겨서 설치하면 된다.
 
 

직접 다운로드 하여 설치

먼저 우분투 패키지 배포 사이트에서 아래 명령으로 deb 설치 파일을 다운로드 한다.
$ wget http://ports.ubuntu.com/pool/main/c/ca-certificates/ca-certificates_20210119~20.04.2_all.deb
 
해당 패키지에 대한 자세한 설명은 아래 사이트를 참고한다.
아래 그림과 같이 해당 설치 파일을 다운로드한다.
 
 
만약 아래와 같이 사설 저장소에 최신 버전의 ca-cerificates 패키지가 존재할 경우, 우분투 공식 배포사이트 대신 사설 저장소에 있는 deb 파일을 다운로드해도 무방하다.
 
 
그리고 아래 명령을 사용하여 다운로드한 deb 파일을 설치한다.
굳이 dpkg 명령을 사용하지 않아도, apt install 명령으로 deb 파일을 설치할 수 있다.
$ sudo apt install ./ca-certificates_20210119~20.04.2_all.deb

 

 
설치를 진행하면 아래와 같이 설치 되는 것을 확인할 수 있다.
이미 시스템에 설치되어 있기 때문에, 패키지의 업데이트가 적용 되는 것을 확인할 수 있다.
 
 
해당 패키지 설치가 완료되면 아래 명령을 이용하여  APT 패키지 목록을 업데이트한다.
$ sudo apt update

 

사설 저장소 주소를 변경하지 않았지만, 정상적으로 목록을 받아오는 것을 확인할 수 있다.
 
 
그리고 아래 명령으로 패키지 업데이트 명령을 수행한다.
$ sudo apt upgrade

 

역시 정상적으로 업데이트가 진행 되는 것을 확인할 수 있다.
 
 
 

저장소 변경하기

인터넷에 연결 된 환경이라면,  ca-certificates 패키지 설치를 위해 저장소 주소를 변경하는 방법도 사용할 수 있다.
 
APT 패키지의 저장소를 변경하는 방법에 대해서는 아래 포스팅을 참고한다.
APT 패키지의 공식 저장소는 우분투 사이트이다. 그러나 해당 사이트는 속도가 빠른 편이 아니다.
 
일반적으로 인터넷이 되는 환경에서는 우분투 공식 사이트보다는, 카카오에서 운영하는 미러 사이트를 사용하기도 한다.
 
공식 사이트인 우분투 사이트를 사용하는 경우, 46번 라인 이후의 security 항목들은 시큐리티 저장소 경로를 적용해야 한다.
 

 

이러한 점 때문에 공식 저장소 경로는 귀찮으니, 카카오 미러 사이트로 변경한다.
 
아래 명령을 이용하여 APT 패키지의 저장소 경로를 수정한다.
$ sudo gedit /etc/apt/sources.list

 

사설 저장소 주소를 카카오에서 운영 중인 미러 사이트 주소 (http://mirror.kakao.com/ubuntu) 로 변경한다.
 
 
 
만약 사설 저장소 주소로 변경하면서 원본 sources.list 파일을 백업해놓은 경우, 해당 파일을 잠시 복원해서 사용해도 무관하다.
# sources.list.bak 파일이 우분투 공식 저장소가 지정 된 백업 파일인 경우

# 기존 사설 저장소 경로 적용 파일 백업
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.change

# 백업한 파일은 sources.list 파일로 복원
$ sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list
 
다음과 같이 sources.list 파일을 변경했다.
 
 
이후 아래 명령을 이용하여  APT 패키지 목록을 업데이트한다.
$ sudo apt update
 
정상적으로 패키지 목록을 받아오는 것을 확인할 수 있다.

 

 
아래 명령을 수행하여 ca-certificates 패키지를 설치한다.
$ sudo apt install ca-certificates
 
이미 시스템에 설치되어 있기 때문에, 패키지의 업데이트가 적용 되는 것을 확인할 수 있다.
 
 
 
설치가 완료되었다면 변경한 APT 공식 저장소 경로를 사설 저장소 경로로 변경한다.
 

 

기존에 백업했던 sources.list.change 파일을 다시 sources.list 파일로 복원해도 된다.
 
사설 저장소 경로로 수정이 완료되면 아래 명령을 사용하여 패키지 목록을 업데이트 한다.
$ sudo apt update
 
정상적으로 목록을 받아오는 것을 확인할 수 있다.
 
 
그리고 아래 명령으로 패키지 업데이트 명령을 수행한다.
$ sudo apt upgrade
 
역시 정상적으로 업데이트가 진행 되는 것을 확인할 수 있다.