개요
사내망의 프락시 서버가 사용하는 사설 SSL 인증서로 인하여 브라우저를 포함한 각종 네트워크 도구 (curl, wget 등)를 사용하지 못하는 문제를 해결하고자 합니다.
해당 문제는 브라우저를 포함한 도구 들은 자체 서명한 사설 SSL 인증서를 신뢰하지 않기 때문에 발생한 문제입니다.
인터넷에 이미 많은 Reference들이 어떠한 이유에서인지 잘 동작하지 않아, 동일한 내용을 다른 방법으로 수행한 결과를 정리하였습니다.
증상(오류)
curl https://www.naver.com
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
대응절차
CA 인증서 획득
echo quit | openssl s_client -showcerts -servername www.naver.com -connect www.naver.com:443 > cacert.pem
획득한 인증서 체인( cacert.pem
) 에는 서버 인증서와 CA 인증서가 함께 포함되어 있습니다. 각 인증서는 -----BEGIN CERTIFICATE-----
로 시작하여 -----END CERTIFICATE-----
로 끝나는데, 일반적으로 첫 번째 것이 서버 인증서입니다.
하단에 위치한 CA 인증서가 필요합니다.
cat cacert.pem
CONNECTED(00000003)
---
Certificate chain
0 s:C = KR, ST = Gyeonggi-do, L = Seongnam-si, O = Naver Business Platform Corp., CN = ssl.pstatic.net
i:C = KR, O = Somansa, CN = Somansa Root CA
-----BEGIN CERTIFICATE-----
--- 생략 ---
-----END CERTIFICATE-----
1 s:C = KR, O = Somansa, CN = Somansa Root CA
i:C = KR, O = Somansa, CN = Somansa Root CA
여기부터 필요합니다.
-----BEGIN CERTIFICATE-----
--- 생략 ---
-----END CERTIFICATE-----
여기까지 필요합니다.
---
Server certificate
--- 생략 ---
vim
과 같은 test 편집기를 사용하여 두번째 CA 인증서(-----BEGIN CERTIFICATE-----
, -----END CERTIFICATE-----
포함) 만 남기고 모두 제거한 후, 다음과 같이 /usr/local/share/ca-certificates
폴더에 새로운 인증서 파일을 생성합니다.
혹은 아래의 스크립트를 사용하여 분리할 수도 있습니다.
# 각 인증서를 별도 파일로 저장하기
# 스크립트 출처 : [openssl - How to extract the Root CA and Subordinate CA from a certificate chain in Linux? - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/368123/how-to-extract-the-root-ca-and-subordinate-ca-from-a-certificate-chain-in-linux)
echo quit | \
openssl s_client -showcerts -servername www.naver.com -connect www.naver.com:443 < /dev/null | \
awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/ \
{ \
if(/-----BEGIN CERTIFICATE-----/) \
{a++}; \
out="cert"a".pem"; \
print >out \
}'
※ 아래 명령 대신 복사(cp
)도 해 보았는데 동작하지 않았습니다. (파일권한 문제로 추측 중)
추가한 인증서를 적용한 후, curl
을 이용하여 동작을 확인합니다.
sudo -s
cat cacert.pem > /usr/local/share/ca-certificates/somansa.crt
exit
sudo update-ca-certificates
curl https://www.naver.com
※ centos7
의 경우는 동일한 방법으로 인증서를 획득한 후,
/etc/pki/ca-trust/source/anchors/
에 인증서를 복사 한 후, update-ca-trust
명령을 실행합니다.
결론
openssl
을 이용하여 사내 Proxy 서버가 사용하는 사설 SSL 인증서를 신뢰할 수 있는 인증기관 목록에 등록했습니다. 이를 통해 웹브라우저와 curl
의 경우는 오류없이 사용할 수 있습니다. 하지만 아쉽게도 모든 네트워크를 사용하는 도구가 CA certificate store 의 인증서를 참고하는 것은 아닌것으로 보입니다. 따라서 이외의 또 다른 오류의 경우 별도의 대응 작업이 필요합니다.
참고
'운영체제' 카테고리의 다른 글
[PowerShell] 스크립트 실행 정책 변경 (0) | 2021.12.16 |
---|---|
[Ubuntu] Offline package 설치 (1) | 2021.06.24 |
[리눅스] Linux From Scratch (10.1) (0) | 2021.04.28 |
[linux] 부팅가능 USB 드라이브 만들기 (0) | 2021.02.28 |
[WSL] 우분투 18.04를 20.04로 업그레이드 하기 (0) | 2020.12.15 |