Self-signed Certificate for https

나이트 개발자·2023년 2월 12일
0
post-thumbnail

회사에 엔지니어가 아직 없어 ChatGPT에게 일 시키며 바쁘게 일하던 중, Https를 위한 Certificate을 무료로 이용하는 방법을 물어봤는데 답이 시원치 않았다. 게다가 내가 이용하는 mitmproxy라는 도구와 잘 맞는 방법이 보이지 않아서 묻는 것보다는 차라리 직접 실험을 하기로 해보았다.

도메인네임만 있으면 인증서(Certificate)를 무료로 쓸수 있고 이를 쉽게 사용할 수 있는 방법이라고 보여 기록해둔다. 작업환경은 우분투 22.04이며, 참고로 나는 항상 우분투에서 개발을 한다.

전체 순서

  1. Install mkcert
  2. Install CA
  3. Create certificate
  4. Merge key and cert to a pem file
  5. Applying to proxy

단계별 설명

1. Install mkcert

코#sudo apt install libnss-tools  for lower ubuntu version
#I did it on ubuntu 22.04
sudo apt install linbnss3-tools
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
chmod 755 mkcert
sudo cp mkcert /usr/local/bin

2. Install CA

mkcert -install
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! 🦊

위명령어 실행 결과와 같이 mkcert가 알아서 시스템에 설치해야할 위치에 root CA를 설치해주고 웹브라우저들의 Authrities에 자동으로 임포트 해준다. 그래서 개발 장비에서 서버를 띄우고 같은 서버에서 웹브라우저에 https 연결을 검증하는데에는 편리하다. 만약, 다른PC나 장비에서 내 장비로 연결해와서 https 에 접근해야한다면 그 장비에 root CA를 설치해줘야한다.

$mkcert -CAROOT
/home/max/.local/share/mkcert

$ls /home/max/.local/share/mkcert
 rootCA-key.pem   rootCA.pem

윈도우의 경우 크롬브라우저에 넣기 위해서는 pfx 파일이 필요하므로 아래와 같이 변환하여 설치 가능하다

openssl pkcs12 -inkey cert.pem -in cert.crt -export -out cert.pfx

위와 같은 명령어로 rootCA.pem 파일의 위치를 찾아 해당 파일을 원하는 장비의 브라우저에 import 해주면 된다.
크롬 브라우저의 경우 다음의 순서대로 찾아가 import한다. 각각은 영문 또는 한글로 된 브라우저에서의 찾아가는 순서이다.

우분투
Settings>Privacy and security>Security>Manage certificates>Authorities
설정>개인정보 및 보안>보안>인증서 관리>권한
윈도우
설정>개인정보 및 보안>보안>인증서 관리>윈도우 기기인증서 관리>신뢰할만한 기기

3. Create certificate

mkcert -key-file key.pem -cert-file cert.crt cleverize.life localhost 127.0.0.1
ls *.pem

위 방법은 내가 사용하는 mitmproxy에 이용하기 좋은 방법으로 정리되었다. 일반적인 웹서버들은 아래와 같은 방법이 더 편리할 수도 있다.

mkcert -key-file key.pem -cert-file cert.pem cleverize.life localhost 127.0.0.1
ls *.pem

4. Merge key and cert to a pem file

cat key.pem cert.crt > cert.pem

이렇게 해서 인증서(Certificate) 인 cert.pem 파일이 생성된다. 제대로 생성됐는지 중요한 정보인 CN 이 잘 셋팅됐는 지는 다음의 명령어로 검사해볼 수 있다.

openssl x509 -in cert.pem -text -noout   

5. Applying to proxy

생성된 인증서는 각자의 환경에 맞게 웹서버나 proxy 서버에 등록을 한다. 나는 mitmproxy를 사용하므로 다음고 같이 설정에 사용하였다.

mitmdump -p 50001 --mode reverse:http://cleverize.life:51001 --certs "*.cleverize.life=cert.pem" --ssl-insecure --set validate_inbound_headers=false

mitmproxy 를 몇 차례 설명하여 조금 설명을 붙이자면 이 서버는 여러 실험을 하기에 적절하여 일반적으로 사용하는 nginx, tyk, traefik, caddy 등은 사용하지 않고 이 서버를 사용하고 있다. 수정해 사용하기 편하기 때문에 proxy에 연동할 모듈들을 내 입맛에 맞게 손볼수 있어 여러 모로 편리한 도구인 것 같다.

이미 목적을 명시했듯이 공인 인증이 아닌 폐쇄된 서비스를 위해 상용 인증서 구매 없이 인증서를 생성하여 https를 구현하기에 적합하다 또는 별도 인증서 구매하지 않고 https 가 잘 동작하는 지라던가 https가 동작해야만 하는 기능들을 테스트할때 잠깐 사용하기에도 제격이다.

아껴야 잘 산다. 공부하면서 헛돈을 쓸 필요는 없다. 화이팅!

만약 공인 인증서를 mitmproxy에서 사용해야한다면 아래 두 명령어를 사용하여 cert.pem 을 만들기만 하면 된다. key.pem 은 private key 이고 cert.crt는 certificate 의 파일 을 넣으면 된다. certbot을 이용할 경우 두 파일 모두 확장자는 pem 이므로 이 점 감안하여 사용하면 된다.

첫 번째 명령어는 생성 mitmproxy용 인증서 생성에 사용하며
두 번째 명령어는 잘 생성됐는 지 확인에 사용한다.

cat key.pem cert.crt > cert.pem
openssl x509 -in cert.pem -text -noout
profile
개발하면서 또는 프러덕 관리하면서 겪는 기억해둬야하는 내용을 메모장 삼아 남긴다. Google Keep이나 메모 도구에 남기는 것과는 달리 잘 정리할 수 있어서 언젠가 들춰봐야할 내용들을 담은 글들이 게시된다.

0개의 댓글