콘텐츠로 이동
Study Note실습 환경

로컬 HTTPS 실습을 브라우저로 보기

결론부터
로컬 실습 화면이 안 열리는 이유는 대개 이름 해석·프록시 예외·인증서 신뢰 셋 중 하나이고, 앞의 둘은 필수이며 CA 등록은 선택이다
이 장에서 처음 나오는 말3개
loopback
자기 자신을 가리키는 주소 127.0.0.1. hosts 항목으로 실습 hostname을 여기에 연결하면 브라우저 요청이 로컬 container로 간다.
PACProxy Auto-Configuration
주소별로 어느 프록시를 쓸지 정하는 스크립트. 회사 브라우저는 보통 이것을 받아 쓴다.
NSS DBNetwork Security Services database
Chrome·Chromium이 Linux에서 인증서를 읽는 사용자별 저장소. OS 인증서 저장소와 별개다.

Compose나 kind 실습이 https://<이름>.<실습>.test:<port> 같은 주소를 쓰면 브라우저는 세 가지를 통과해야 한다. 이름을 loopback으로 해석하고, 그 요청을 회사 프록시로 보내지 않고, 실습이 만든 인증서를 받아들이는 것이다. 이 장은 세 준비를 운영체제별로 모은다. 실습별 hostname·port·CA 파일 경로는 각 실습 덱이 정한다.

준비없으면 생기는 일필수 여부
hosts 항목이름을 못 찾아 페이지가 열리지 않음필수
브라우저 프록시 예외요청이 회사 프록시로 나가 loopback에 닿지 못함회사 프록시·PAC 환경에서 필수
로컬 CA 등록host별로 한 번씩 인증서 경고를 넘겨야 함선택
  • 실습 hostname을 브라우저가 로컬로 해석하게 하려면 무엇을 고치는가?
  • 회사 프록시 환경에서 예외는 어디에 넣는가?
  • 인증서 경고 없이 보려면 CA를 어디에 등록하고, 실습을 초기화하면 어떻게 지우는가?

/etc/hosts에 실습이 쓰는 이름을 모두 127.0.0.1로 적는다. 한 줄에 여러 이름을 둘 수 있다.

127.0.0.1 app.example.test api.example.test

macOS와 Ubuntu 모두 같은 파일이며 편집에는 sudo가 필요하다. 확인은 브라우저 대신 터미널에서 한다.

터미널 창
getent hosts app.example.test # Ubuntu
dscacheutil -q host -a name app.example.test # macOS

브라우저가 회사 프록시나 PAC를 쓰면 실습 이름도 프록시로 보낸다. 프록시는 loopback을 모르므로 연결이 실패하거나 회사 오류 페이지가 뜬다. 실습 도메인 접미사를 예외에 넣는다.

시스템 설정 → 네트워크 → 현재 연결 → 세부사항 → 프록시의 프록시 설정을 무시할 호스트 및 도메인에 *.example.test를 추가한다. Chrome·Safari는 이 설정을 따르고, Firefox는 자체 네트워크 설정에서 같은 값을 프록시 없음에 넣는다.

터미널의 curl은 브라우저 설정이 아니라 NO_PROXY를 본다. 같은 접미사를 .example.test 형태로 넣는다. daemon과 build 쪽 프록시 설정은 Docker Compose 실습 환경에 있다.

실습이 만든 CA를 등록하지 않아도 host마다 한 번씩 인증서 경고를 넘기면 동작한다. 경고 없이 보고 싶을 때만 등록하고, 등록 뒤에는 브라우저를 다시 시작한다. 아래 ca.crt와 nickname은 실습 덱이 정한 값으로 바꾼다.

login keychain에 SSL trust root로 등록한다. 실행하면 암호 확인 창이 뜬다. Chrome·Safari는 keychain을 보고, Firefox는 설정의 인증서 관리자에서 같은 파일을 가져온다.

터미널 창
security add-trusted-cert -r trustRoot -p ssl \
-k ~/Library/Keychains/login.keychain-db path/to/ca.crt

nickname으로 지운다. 등록할 때 쓴 이름을 그대로 넣는다.

터미널 창
security delete-certificate -c example-lab-ca ~/Library/Keychains/login.keychain-db

Firefox에 가져온 CA는 인증서 관리자에서 같은 이름을 찾아 삭제한다.

  1. 이름 해석부터 본다. getent hosts 또는 dscacheutil이 127.0.0.1을 돌려주지 않으면 hosts 항목 문제다.

  2. 프록시를 본다. 터미널의 curl --noproxy '*' -k https://app.example.test:<port>/가 되는데 브라우저만 안 되면 브라우저 프록시 예외 문제다.

  3. 인증서를 본다. 경고 화면이 뜨는 것은 정상이며 넘기면 된다. 등록했는데도 경고가 뜨면 옛 CA가 남아 있거나 브라우저를 다시 시작하지 않은 것이다.

  • hosts 항목과 프록시 예외는 필수이고, CA 등록은 경고를 없애는 선택이다.
  • 브라우저와 curl은 프록시 예외를 다른 곳에서 읽는다. 브라우저는 OS 또는 Firefox 설정, curl은 NO_PROXY다.
  • Ubuntu Chrome은 OS 저장소가 아니라 NSS DB에 CA를 넣는다.
  • 실습을 초기화하면 옛 CA를 지우고 새 CA를 다시 등록한다.