User Tools

Site Tools


ssl_인증서_문제의_해결_방법

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ssl_인증서_문제의_해결_방법 [2021/05/27 10:15] – [wget은 아직 주의가 필요합니다] hyjeongssl_인증서_문제의_해결_방법 [2023/06/29 14:47] (current) hyjeong
Line 1: Line 1:
-====== 리눅스에서 SSL 인증서 문제의 해결 방법(v0.9) ======+====== 리눅스에서 SSL 인증서 문제의 해결 방법(v0.94) ====== 
 + 
 +  * 작성자 및 최종 수정일시:  --- //[[hyjeong@kribb.re.kr|Haeyoung Jeong]] 2023/06/29 14:46//
   * 최초 작성일: 2021년 5월 24일   * 최초 작성일: 2021년 5월 24일
-  * 최종 수정일시: 2021/05/25 21:27 
   * 이 문서에 대한 짧은 URL: https://bit.ly/3hSWC9J   * 이 문서에 대한 짧은 URL: https://bit.ly/3hSWC9J
-이 문서는 2년이 넘는 시행착오를 거치면서 얻은 정보를 바탕으로 다른 분들에게 도움을 드리고자 작성하였습니다. <color #ed1c24>공공기관의 전산망 보안 체계를 무력화하거나 우회하는 방법을 소개하는 것이 결코 아니니 오해가 없으시길 바랍니다.</color>+  * [[https://linuxconfig.org/how-to-test-internet-connection-on-linux|How to test Internet connection on Linux]] 
 +이 문서는 2년이 넘는 시행착오를 거치면서 얻은 정보를 바탕으로 다른 분들에게 도움을 드리고자 작성하였습니다. <color #ed1c24>공공기관의 전산망 보안 체계를 무력화하거나 우회하는 방법을 소개하는 것이 결코 아니니 오해가 없으시길 바랍니다.</color> 그리고 간혹 국가정보원에서 특정 IP 주소(https://raw.githubusercontent.com/)에 대한 접근을 하지 못하게 지시하는 경우가 있습니다. 업무상 꼭 다운로드해야 되는 프로그램를 이런 사이트에서 배포하는 경우에는 해결할 도리가 없습니다.  
  
 컴퓨터를 구입해서 KRIBB 안에서 IP address를 발급받아 처음으로 웹브라우저를 실행한 사람이라면 누구나 다음의 화면을 만나게 되었을 것입니다. 대개는 이 화면에서 안내하는대로 몇 번의 클릭을 통해 SSL 인증서(파일명은 **SSLPrism.crt**)를 각자 PC에(정확하게는 웹브라우저) 설치하였을 것이고, 이후 윈도우에서 인터넷 작업을 하는데 별다른 어려움이 없을 것입니다. 설치 이후에도 http://sslcert.cc를 접속하면 다시 이 화면을 볼 수 있습니다. 하지만 퇴근 후 집에서 컴퓨터를 켠 다음에 같은 곳을 접속하면 이 화면은 나오지 않습니다.  컴퓨터를 구입해서 KRIBB 안에서 IP address를 발급받아 처음으로 웹브라우저를 실행한 사람이라면 누구나 다음의 화면을 만나게 되었을 것입니다. 대개는 이 화면에서 안내하는대로 몇 번의 클릭을 통해 SSL 인증서(파일명은 **SSLPrism.crt**)를 각자 PC에(정확하게는 웹브라우저) 설치하였을 것이고, 이후 윈도우에서 인터넷 작업을 하는데 별다른 어려움이 없을 것입니다. 설치 이후에도 http://sslcert.cc를 접속하면 다시 이 화면을 볼 수 있습니다. 하지만 퇴근 후 집에서 컴퓨터를 켠 다음에 같은 곳을 접속하면 이 화면은 나오지 않습니다. 
Line 44: Line 46:
     자기 자신이 서명한 인증서를 발견했습니다.     자기 자신이 서명한 인증서를 발견했습니다.
   ftp.ncbi.nlm.nih.gov에 안전하지 않게 연결하려면 `--no-check-certificate'를 사용하십시오.   ftp.ncbi.nlm.nih.gov에 안전하지 않게 연결하려면 `--no-check-certificate'를 사용하십시오.
 +한글화가 잘 된 시스템에서 실행을 하니 친절한 메시지가 나옵니다 :)
 ===== 문제를 해결할 수 있는 단편적인 해결책은 있습니다. 그러나... ===== ===== 문제를 해결할 수 있는 단편적인 해결책은 있습니다. 그러나... =====
-wget 실행 시 '%%--%%no-check-certificate' 옵션을 주거나, pip install 실행 시 '%%--%%trusted-host pypi.org %%--%%trusted-host files.pythonhosted.org' 옵션을 주는 방법 등이 인터넷 검색을 하면 종종 보입니다. ~/.condarc file에 'ssl_verify: false'를 삽입하거나, ~/.Renviron 파일을 수정하는 등 각 애플리케이션마다 문제를 해결하는 방법이 하나씩 다 있을 정도입니다. 그러나 이는 완벽한 해결책이 아닙니다. 심지어 python 프로그램이 urllib(3)을 쓰는 경우 지정된 SSL 인증서를 쓰도록 스크립트를 수정하는 방법까지 알려져 있습니다. 그러나 저와 같이 python 프로그램을 설치 및 활용만 겨우 하고 그 문법을 모르는 사람에게는 별다른 도움이 되지 않습니다. 특히 wget은 명령행 환경에서 단독으로 쓰이지만 curl은 라이브러리를 통해서 다른 프로그램 혹은 스크립트 내부에서 파일 다운로드를 하는데 매우 널리 쓰입니다. 따라서 인증서를 회피하거나 바꿀 수 있게 옵션 또는 파라미터를 주기가 아주 적당치 않습니다.+wget 실행 시 '%%--%%no-check-certificate' 옵션을 주거나($HOME/.wgetrc 파일에 'check_certificate = off'를 선언해 두어도 좋음), pip install 실행 시 '%%--%%trusted-host pypi.org %%--%%trusted-host files.pythonhosted.org' 옵션을 주는 방법 등이 인터넷 검색을 하면 종종 보입니다. ~/.condarc file에 'ssl_verify: false'를 삽입하거나, ~/.Renviron 파일을 수정하는 등 각 애플리케이션마다 문제를 해결하는 방법이 하나씩 다 있을 정도입니다. 그러나 이는 완벽한 해결책이 아닙니다. 심지어 python 프로그램이 urllib(3)을 쓰는 경우 지정된 SSL 인증서를 쓰도록 스크립트를 수정하는 방법까지 알려져 있습니다(사례 [[https://multifrontgarden.tistory.com/219|링크]]). 그러나 저와 같이 python 프로그램을 설치 및 활용만 겨우 하고 그 문법을 모르는 사람에게는 별다른 도움이 되지 않습니다. 특히 wget은 명령행 환경에서 단독으로 쓰이지만 curl은 라이브러리를 통해서 다른 프로그램 혹은 스크립트 내부에서 파일 다운로드를 하는데 매우 널리 쓰입니다. 따라서 인증서를 회피하거나 바꿀 수 있게 옵션 또는 파라미터를 주기가 아주 적당치 않습니다.
  
 ===== 가장 근본적인 방법은 system-wide한 인증서 설치 위치 정보를 이용하는 것입니다 ===== ===== 가장 근본적인 방법은 system-wide한 인증서 설치 위치 정보를 이용하는 것입니다 =====
Line 58: Line 61:
   export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt   export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
  
-**REQUESTS_CA_BUNDLE**은 python을 위한 것이고, **CURL_CA_BUNDLE**은 curl과 그 관련 프로그램을 위한 것입니다. 파일 다운로드를 내부적으로 실행하는 대부분의 스크립트 혹은 애플리케이션은 이 두 개의 변수로 인하여 다 커버가 될 것입니다. SSLPrism.crt를 시스템에 설치하고 두 개의 환경변수에게 그 위치를 제대로 알려주기만 하면 에러를 발생하는 프로그램마다 옵션을 따로 줄 이유가 없습니다.+**REQUESTS_CA_BUNDLE**은 python을 위한 것이고(이것은 확실하지 않습니다), **CURL_CA_BUNDLE**은 curl과 그 관련 프로그램을 위한 것입니다. 파일 다운로드를 내부적으로 실행하는 대부분의 스크립트 혹은 애플리케이션은 이 두 개의 변수로 인하여 다 커버가 될 것입니다. SSLPrism.crt를 시스템에 설치하고 두 개의 환경변수에게 그 위치를 제대로 알려주기만 하면 에러를 발생하는 프로그램마다 옵션을 따로 줄 이유가 없습니다
 + 
 +**PYTHONHTTPSVERIFY** 환경변수를 0으로 설정하면 python 스크립트가 파일을 다운로드할 때 SSL 인증서를 확인하는 절차를 생략할 수 있다는 글을 읽었습니다. 그러나 antiSMASH 5.x 설치에서 이는 작동하지 않았습니다. 따라서 파이썬 스크립트를 고쳐서 파일을 비로소 다운로드하는 경험을 2021년 5월 28일에 처음 하게 되었습니다. 이에 대한 것은 [[https://blog.genoglobe.com/2021/05/antismash-v5.html|antiSMASH v5가 이렇게 설치하기 어려운 소프트웨어였던가?]]에 기록하였습니다. 
 + 
 +==== Oxford Nanopore MinION Mk1C의 경우 ==== 
 +우분투가 설치된 이 작은 장치는 유선 인터넷 설정 자체도 쉽지 않습니다. Wi-Fi가 되는 환경에 가지고 가서 어떻게 해서든 다른 컴퓨터를 통해 SSH로 진입해야 유선 인터넷 연결을 위한 고정 IP 주소를 설정할 수 있습니다. 그 다음에는 위에서 Ubuntu 환경의 인증서 설치 작업과 유사하게 진행하면 되는데, update-ca-certificates 패키지 자체가 설치되지 않은 상태일 것입니다. /etc/ssl/certs/ca-certificates.crt 파일을 다른 이름으로 백업한 뒤 SSLPrims.crt를 ca-certificates.crt라는 이름으로 바꾸어 놓았더니 비로소 연구소 환경에서도 Mk1C <=> 외부 인터넷 소통이 되는 것 같습니다(완벽하지는 않음).
  
 ===== wget은 아직 주의가 필요합니다 ===== ===== wget은 아직 주의가 필요합니다 =====
Line 71: Line 79:
     Self-signed certificate encountered.     Self-signed certificate encountered.
   To connect to ftp.ncbi.nlm.nih.gov insecurely, use `--no-check-certificate'.   To connect to ftp.ncbi.nlm.nih.gov insecurely, use `--no-check-certificate'.
-ㅁㅇㅁㄴㅇ+Conda tormes-1.2.1 environment에서 제공하는 wget은 인증서 문제로 에러 메시지를 토해냅니다. 왜 system-wide하게 설치된 인증서 정보를 사용하지 못하는 것일까요? 아마도 conda 환경에서 같이 딸려온 인증서 정보(/opt/miniconda3/envs/tormes-1.2.1/ssl 디렉토리에 있음)이 우선하기 때문인 것으로 생각됩니다. 다행스럽게도 같은 환경의 curl은 환경변수(CURL_CA_BUNDLE)의 설정을 잘 따라가는 것 같습니다. 
 + 
 +그렇다면 /opt/miniconda3/envs/tormes-1.2.1/etc/wgetrc 파일을 건드려서 wget에 대해서만 업데이트된 인증서 정보(ePrism SSL 을 포함하고 있는)를 참조하도록 만들면 됩니다. 이 파일을 열어서 다음 라인을 추가해 주십시오. 이는 CentOS의 경우입니다. 
 +  # 다음의 줄을 /etc/wgetrc 또는 ~/.wgetrc에 넣으면 평소에 '--no-check-certificate' 옵션을 줄 필요가 없습니다. 
 +  # 단, 이 글에서 설명한 방법대로 인증서 정보를 전혀 수정하지 않은 경우에 그렇습니다. 
 +  ca_certificate=/etc/pki/tls/cert.pem 
 +이제 /opt/miniconda3/envs/tormes-1.2.1/bin/wget 명령으로 $TARGET을 다운로드해 보십시오. 에러 없이 잘 될 것입니다.
 ===== 이 문서는 완벽하지 않습니다! ===== ===== 이 문서는 완벽하지 않습니다! =====
 이 문서는 제가 약 2년이 넘는 기간 동안 삽질을 하면서 단편적인 해결책으로 땜질만을 해 오다가 비교적 최근-2021년 5월 하순-에 (거의?) 완벽한 해결책을 찾아낸 것 같아서 지식의 공유 차원에서 작성한 것입니다. 저는 프로그래밍이나 보안의 전문가가 아니므로 당연히 오류가 있을 수 있습니다. [[https://blog.genoglobe.com/|제 블로그]]에서 SSL, 인증서, certificate, 오류, error 등을 넣어서 검색을 해 보시면 약 2년이 넘는 기간 동안 제가 얼마나 많은 시행착오를 겪었는지를 적나라하게 보실 수 있습니다. 제 블로그에 덧글을 달아서 두 환경변수 설정에 대한 아이디어를 주신 분에게 깊은 감사를 드립니다. 작성자의 성함이 '지나가는이'로만 되어 있어서 보다 직접적으로 감사의 표시를 할 수 없음이 아쉽습니다. 덧글이 달린 블로그의 원문은 [[https://blog.genoglobe.com/2019/04/ssl-conda.html|여기]]에 있습니다. 이 원문에는 제가 검색을 통해 주워담은 SSL 인증서와 접속이 형성되는 TLS handshaking 과정 등의 설명 자료 링크가 있으니 전반적인 공부에 도움이 될 것입니다. 당시에는 '지나가는이'님의 덧글을 잘 이해하지 못하고 있다가 최근에 비로소 그 변수의 위력을 알게 되었습니다.  이 문서는 제가 약 2년이 넘는 기간 동안 삽질을 하면서 단편적인 해결책으로 땜질만을 해 오다가 비교적 최근-2021년 5월 하순-에 (거의?) 완벽한 해결책을 찾아낸 것 같아서 지식의 공유 차원에서 작성한 것입니다. 저는 프로그래밍이나 보안의 전문가가 아니므로 당연히 오류가 있을 수 있습니다. [[https://blog.genoglobe.com/|제 블로그]]에서 SSL, 인증서, certificate, 오류, error 등을 넣어서 검색을 해 보시면 약 2년이 넘는 기간 동안 제가 얼마나 많은 시행착오를 겪었는지를 적나라하게 보실 수 있습니다. 제 블로그에 덧글을 달아서 두 환경변수 설정에 대한 아이디어를 주신 분에게 깊은 감사를 드립니다. 작성자의 성함이 '지나가는이'로만 되어 있어서 보다 직접적으로 감사의 표시를 할 수 없음이 아쉽습니다. 덧글이 달린 블로그의 원문은 [[https://blog.genoglobe.com/2019/04/ssl-conda.html|여기]]에 있습니다. 이 원문에는 제가 검색을 통해 주워담은 SSL 인증서와 접속이 형성되는 TLS handshaking 과정 등의 설명 자료 링크가 있으니 전반적인 공부에 도움이 될 것입니다. 당시에는 '지나가는이'님의 덧글을 잘 이해하지 못하고 있다가 최근에 비로소 그 변수의 위력을 알게 되었습니다. 
  
 혹시 이 위키문서 또는 바로 앞서 소개한 제 블로그의 문서 내용에 대하여 의견이 있으시면 언제든지 연락을 주십시오. 혹시 이 위키문서 또는 바로 앞서 소개한 제 블로그의 문서 내용에 대하여 의견이 있으시면 언제든지 연락을 주십시오.
 +
 +===== 기타 참고 자료 =====
 +  * [[https://linuxconfig.org/how-to-test-internet-connection-on-linux|How to test Internet connection on Linux]]
  
ssl_인증서_문제의_해결_방법.1622078119.txt.gz · Last modified: by hyjeong