우선 왜 Chrome창에 Not secure가 발생하는지 간단히 알아보고자 한다. 그러기 위해선 아래의 내용을 알아야한다.
HTTP는 Hypertext인 HTML을 전송하기 위한 통신규약이다. HTTPS에서 S는 Secure 약자로 보안이 강화된 프로토콜이다.
로그인을 위해 서버로 비밀번호를 전송하거나 중요한 기밀 문서를 열람하는 과정에서 악의적인 감청이나 데이터 변조등 일어날 수 있는데 이를 보안한 것이 HTTPS이다.
SSL(Secure Socket Layer)인증서는 클라이언트와 서버간의 통신을 제 3자가 보증해주는 전자화된 문서이다.
만약 HTTPS 대신 HTTP 프로토콜을 사용하거나 SSL 인증서가 없는경우 혹은 공식인증 받은 기관에서 발급받지 않은경우 아래의 예시처럼 발생한다. 크롬 버전 68부터 도입시작했다. 웹 사이트 소유자는 자신의 사이트를 보호해야 할 책임이 있으며, 웹사이트 방문자는 소유자에게 보안조치를 구현하도록 요청할 수 있다.
안전하지 않는 웹사이트라고 표시해준다. 저번 글에서 Not Secure가 발생한 것은 공식 기관에서 받은 인증서가 아니기 때문에 신뢰할 수 없는 인증서라 Not Secure를 띄어준것이다.
그렇다고 돈을 들여 발급받자니 부담스러운 가격에 통장은 이미 '텅장'이 되버렸다. 그래서 다른 방법을 찾게되었고 직접 사용해보았다.
openssl로 https 를 테스트하기위해 인증서를 발급했다면, 신뢰할 수 있는 사설 인증서를 받아서 적용해보자
sudo apt install libnss3-tools
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
chmod +x mkcert
sudo cp mkcert /usr/local/bin/
mkcert -install
위 명령어를 통해 로컬을 인증된 발급기관으로 추가한다.
다음은 로컬 환경에 대한 인증서를 만들어준다. localhost로 대표되는 로컬 환경에 대한 인증서를 만들경우 아래의 명령어를 입력한다
mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
여기서 127.0.0.1
(IPv4)는 루프백 IP로 자기 자신의 컴퓨터를 가르키며, ::1
(IPv6)를 입력하여 localhost 127.0.0.1,::1
에서 사용이 가능한 인증서를 만든다.
이렇게 key.pem
과 cert.pem
이 생성되었다. 기존에 만들어둔 HTTPS 서버에 다시 가져와 작성해보자.
Let's Encrypt는 인증서 비용이 https 보급의 방해가 된다 생각하여 SSL 인증서를 무료로 제공하여 https 보급에 힘을 주기 위해 만들어졌다. 개인사용자 외에 기존 유료 인증서를 구매한 업체도 무료로 https를 사용할 수 있게 해주었다.
위 사이트에 접속하여 시작하기를 찾아간다. "쉘 엑세스 권한이 있는 경우" 에서 Certbot
을 클릭한다.
certbot으로 인증서를 받아야 하는데 이때는 도메인이 있어야 원활히 진행이 가능하므로 도메인을 구매하고 차후에 다루도록 하겠다.