반응형
설명
리눅스 환경에서 wget 명령어로 https 접속 또는 파일을 다운로드할 때 인증서 에러가 발생하는 경우가 있습니다. 이런 경우의 대처법을 알아봅니다.
에러 메세지
DEBUG output created by Wget 1.19.5 on linux-gnu.
Reading HSTS entries from /root/.wget-hsts
URI encoding = ‘UTF-8’
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
--2021-11-09 11:29:43-- https://DOMAIN/
Certificates loaded: 143
Resolving DOMAIN (DOMAIN)... xxx.xxx.xxx.xxx
Caching DOMAIN => xxx.xxx.xxx.xxx
Connecting to DOMAIN (DOMAIN)|xxx.xxx.xxx.xxx|:443... connected.
Created socket 3.
Releasing 0x000055e370123100 (new refcount 1).
ERROR: The certificate of ‘DOMAIN’ is not trusted.
ERROR: The certificate of ‘DOMAIN’ hasn't got a known issuer.
대응방법 (루트 인증서 설치)
루트 인증서가 설치되어 있지 않거나, 갱신되지 않아서 인증서 문제가 발생할수 있으므로, 아래와 같이 루트 인증서를 설치하거나 업데이트합니다.
### CentOS 7/8 ###
[root@localhost ~]# dnf -y install ca-certificates
or
[root@localhost ~]# dnf -y update ca-certificates
### Ubuntu 20.04 ###
root@localhost:~# apt -y install ca-certificates
or
root@localhost:~# apt -y upgrade ca-certificates
대응방법 (--no-check-certificate 옵션)
https 프로토콜을 사용할 때 굳이 인증서 확인이 필요 없다면 아래와 같이 인증서 확인을 무시하는 옵션을 포함하여 wget을 실행합니다.
[root@localhost ~]# wget --no-check-certificate https://DOMAIN/
대응방법 (인증서 재발급)
흔치 않는 경우지만, 가끔 인증서 갱신에서 중간 인증서와 루트 인증서 정보가 누락된채 발급되는 경우가 있습니다. 이렇게 생성된 인증서는 브라우저에서는 문제없이 동작할수도 있지만, wget과 같은 명령어에서는 인증서 에러가 발생합니다. 이런 경우 openssl 명령어로 간단히 확인할수 있습니다. 아래는 정상적인 depht와 chain 정보를 보여주는 예입니다.
[root@localhost ~]# openssl s_client -connect www.daum.net:443
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = Thawte TLS RSA CA G1
verify return:1
depth=0 C = KR, ST = Jeju-do, L = Jeju-si, O = Kakao Corp., CN = *.daum.net
verify return:1
---
Certificate chain
0 s:C = KR, ST = Jeju-do, L = Jeju-si, O = Kakao Corp., CN = *.daum.net
i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = Thawte TLS RSA CA G1
1 s:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = Thawte TLS RSA CA G1
i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
2 s:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
---
반대로 아래는 서버 인증서 만 존재할뿐, 중간(체인) 인증서 및 루트 인증서 정보가 없는 경우입니다. 이런 경우 wget과 같은 명령어로 https 프로토콜에 접속할 경우 인증서 에러가 발생하게 됩니다. 이와 같은 경우는, 신속하게 인증서를 재발급하는 것이 좋습니다.
[root@localhost ~]# openssl s_client -connect DOMAIN:443
CONNECTED(00000003)
depth=0 C = US, ST = California, L = Campbell, O = xxx CN = DOMAIN
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Campbell, O = xxx CN = DOMAIN
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Campbell, O = xxx CN = DOMAIN
i:C = US, O = DigiCert Inc, CN = DigiCert TLS RSA SHA256 2020 CA1
---
반응형
'Server > Linux' 카테고리의 다른 글
[리눅스] 파일 및 폴더 퍼미션 일괄변경 (0) | 2021.11.18 |
---|---|
[리눅스] UMASK 명령어 (0) | 2021.11.18 |
firewall-cmd --new-service (0) | 2020.10.08 |
[BIND] CentOS 7에서 DNS 설치 (0) | 2020.07.17 |
CURL 또는 LYNX로 웹 사이트의 헤더 정보 확인하기 (0) | 2019.07.02 |