[https 적용하기] 웹서버에 도메인 네임 주소와 SSL 인증서 설치하기

By | 2023-12-20

직접 구축한 홈페이지 또는 블로그에 https를 적용하기 위해서는 웹서버 또는 블로그에 직접 구입한 도메인 네임 주소를 연결하고 SSL 인증서를 발급받아 설치해야 한다. 이 과정은 관련 지식이 부족한 사람에게는 매우 어려운 작업이지만 하나 하나 차근차근 공부해나간다면 충분히 할 수 있는 작업이기도 한다. 일단 도메인 네임 주소의 구입과 워드프레스 등을 설치할 수 있는 웹서버를 이미 구축했다 가정하고 구입한 도메인 네임 주소의 연결과 SSL 인증서 발급을 통해 https를 적용하는 과정에 대해 설명한다.

만약 워드프레스 등의 설치를 위한 웹서버를 구축하는 과정을 공부하고 싶다면 앞의 두 포스트를 먼저 공부하기 바란다.

  1. Rocky Linux에 APM 설치하기 – Apache + PHP 설치하기 (PHP-FPM)
  2. Rocky Linux 9.3에 MariaDB 설치하기

웹서버에 도메인 네임 주소 연결하기

도메인 주소를 구입하게 되면 일반적으로 mydomain.com 과 같이 .com 또는 .co.kr 또는 .pe.kr 등 미리 정해진 1차 및 2차 도메인 하위의 2차 및 3차 도메인을 구입하는 사람이 직접 정할 수 있다. 이 블로그의 경우 blogger.pe.kr 이라는 도메인 주소를 갖는데 .kr 은 1차 도메인 중 국가 도메인이고 .pe 는 2차 도메인으로서 개인을 의미한다. 즉 한국의 개인도메인이라는 의미다. 그리고 .blogger는 도메인을 구입할 때 직접 정한 주소로서 3차 도메인이다.

이렇게 구입한 도메인은 레지스트리라고 불리는 도메인 관리기관 또는 도메인 리셀러가 관리하게 되는데 대부분은 구입한 레지스트리의 홈페이지에서 구입한 사람이 직접 관리할 수 있다.

아래 화면은 blogger.pe.kr 도메인의 레지스트리인 가비아(gabia)라는 레지스트리의 홈페이지에 로그인하여 구입한 도메인 주소를 확인할 수 있는 관리화면이다.

화면 중앙에 보이는 “도메인”에 숫자 2가 표시된 것을 볼 수 있다. 블로그 주인장은 2개의 도메인주소를 구입해 갖고 있음을 알 수 있다.

도메인을 클릭해 들어가면 보유하고 있는 도메인의 목록이 나오는데.. 아래 화면처럼 “DNS 관리툴” 등의 도메인 관리 기능으로 갈 수 있는 메뉴가 있기 마련이다.

이 도메인 관리 기능으로 들어가면 다음과 같이 도메인 주소와 연결한 웹서버, 메일서버 등 여러 서버를 도메인의 하위 주소에 연결할 수 있도록 할 수 있는 “DNS 관리”를 수행할 수 있는 화면이 표시된다.

DNS 관리라는 것은 쉽게 설명하자면 이용자가 웹 브라우저의 주소창에 https://www.blogger.pe.kr 을 입력했을 때 어떤 IP의 웹서버를 연결시켜 줄지를 결정하는 작업이라고 이해하면 된다.

위 화면에서 도메인 이름이 보이고 그 우측의 DNS 정보 항목에 “설정된 DNS 레코드 정보가 없습니다.”라고 표시되어 있는 것을 볼 수 있다. 이는 아직 해당 도메인주소에 연결된 서버의 IP가 없다는 의미다.

여기서 “설정” 버튼을 누르면 아래 화면과 같이 도메인주소와 연결할 서버의 IP를 조합하여 등록하는 DNS 레코드 관리 화면이 표시된다.

“레코드 수정” 버튼을 누르면 도메인주소의 가장 하위 주소인 호스트 이름과 IP 주소를 입력할 수 있는 창이 실행된다.

화면 하단의 “레코드 추가” 버튼을 누른다.

비어있는 한행이 표시되는데 맨 앞에서 부터 입력해준다.

“타입”은 A 를 입력한다. 즉 A 타입 레코드라는 의미다.

”호스트”에는 웹서버를 의미하는 www를 입력한다. 즉 www.blogger.pe.kr 과 같은 형태다. 원한다면 www 대신 다른 단어를 입력해도 된다. 예를 들면 blog 라고 입력하면 브라우저의 주소창에 blog.blogger.pe.kr을 입력했을 때 연결할 IP를 지정한다고 생각하면 된다. 만약 호스트 주소 없이 지금 이 블로그 처럼 도메인 주소 (blogger.pe.kr과 같이)만 입력해서 접속할 수 있도록 하고 싶다면 “호스트”에 @ 를 입력하면 된다.

“값/위치”에는 연결해줄 웹서버 또는 워드프레스가 설치된 서버의 IP 주소를 입력한다.

그리고 “확인” 과 “저장”을 누르면 된다.

그러면 다음과 같이 A 레코드가 하나 추가된 것을 확인할 수 있다.

이것으로 웹서버에 도메인주소 연결이 끝났다. 이제 잠시 시간이 흐른 다음 웹 브라우저에서 주소창에 해당 도메인 주소를 입력하면 웹서버로 연결되는 것을 볼 수 있다.

먼저 화면은 A 레코드를 등록할 때 @를 입력해 호스트 이름을 사용하지 않고도 접속할 수 있도록 한 화면이다.

Https 적용을 위한 Apache 웹서버 설정 변경

사실 웹서버에 도메인주소를 연결하는 것 보다 더 까다로운 것이 바로 SSL 인증서를 발급하여 웹서버에 적용하는 것이다. 이 과정은 SSL 인증서 발급과 웹서버에 적용하는 것이 별개인 것 처럼 설명이 되지만 사실 하나의 연결된 과정으로 진행된다. 즉 구분이 불가하다고 보면 된다. 만약 이 작업을 분리하여 하고자 한다면 이 블로그에 포스팅하기 어려울 만큼 복잡하고 까다로운 수작업이 진행된다.

때문에 대부분 인증서 발급기관에서 만들어준 명령어를 리눅스 서버에 설치하여 해당 명령어를 실행하는 방법으로 SSL 인증서를 발급하여 웹서버에 자동으로 설치하게 된다. 다만 이 과정을 자동으로 진행하려면 웹서버에서 몇 가지 미리 설정해줘야 할 부분이 있다. 그 과정을 포스팅 한다.

먼저 웹서버가 ssl 통신을 할 수 있도록 필요한 mod_ssl이 설치되고 필요한 설정이 되어있는지 확인해야 한다.

웹 브라우저에서 https:// ~~ 와 같은 URL로 웹서버에 접속하면 웹서버는 브라우저와 HTTPS로 통신해야 하는데 이때 내부적으로 SSL암호화 통신 프로토콜을 사용한다. 이때 사용되는 암호화 라이브러리가 mod_ssl 이라는 라이브러리다. 이 라이브러리는 웹서버를 컴파일할 때 웹서버의 바이너리에 포함시켜 컴파일할 수 있다. 만약 그렇게 했다면 다음과 같이 httpd -l 명령을 실행했을 때 ssl 관련 목록이 표시되어야 한다.

위 화면처럼 ssl 관련 파일이 표시되지 않으면 동적으로 SSL 라이브러리를 Load 시켜줘야 한다. 일반적으로 dnf 명령이나 yum 명령으로 Apache 웹서버를 설치하면 후자의 방식으로 SSL 라이브러리가 로드되도록 설치된다. 다음과 같이 mod_ssl.so 파일이 Apache 웹서버의 SERVER_ROOT 디렉토리 아래에 있어야 한다.

만약 mod_ssl.so 파일이 존재하지 않는다면 dnf 명령 (or yum)으로 mod_ssl 패키지를 설치하면 된다. ( sudo dnf install mod_ssl )

그리고 mod_ssl.so 파일을 Apache 웹서버가 실행될 때 로드(Load)할 수 있도록 httpd.conf 에 설정해줘야 한다. 예전의 Apache에서는 LoadModule 이라는 지시자를 통해 mod_ssl.so를 로드하도록 httpd.conf에 직접 명시했었는데 요즘에는 다음과 같이 특정 디렉토리에 conf 파일을 분리하여 작성하고 해당 디렉토리에 있는 conf 파일을 읽어 처리하도록 변경되었다.

즉 conf.modules.d에 있는 .conf 파일을 읽어 그 안에 있는 LoadModule로 기록된 so 파일들을 Load 한다는 의미다. 실제로 conf.modules.d 디렉토리에서 확인하면 00-ssl.conf 파일이 하나 존재하며 그 안에 LoadModule ssl_module modules/mod_ssl.so 라는 라인이 포함되어 있는 것을 확인할 수 있다.

그리고 Apache 웹서버가 HTTPS 통신을 위해 SSL 모듈을 사용할 때 필요한 설정은 httpd.conf의 다음 라인에 의해 ssl.conf를 읽어 사용하게 된다. httpd.conf이 가장 아래쪽에 보면 다음과 같이 설정되어 있다.

conf.d에 가면 ssl.conf 파일이 있다.

여기까지 문제없이 설정되어 있다면 구입하고 연결한 도메인주소와 관련된 설정을 해줘야 한다.

먼저 httpd.conf 파일에서 다음과 같이 ServerName 항목에 구입한 도메인주소를 설정해준다.

먼저 ServerName에 구입하여 도메인 관리기관에 등록한 호스트네임 + 도메인주소로 구성된 도메인 주소를 등록해준다. 포트는 80번이다.

그리고 http 접속 시 https로 리다이렉션을 위해 <VirtualHost *:80> 에서부터 </VirtualHost> 까지의 내용을 추가해준다. .htaccess에서 설정할 수도 있지만 httpd.conf 파일에 설정하는 것이 훨씬 편리하다. 여기에도 ServerName은 앞에서 지정한 호스트네임 + 도메인주소를 명기해준다.

다음은 ssl.conf 파일을 수정해줘야 한다.

먼저 ssl.conf 파일에서 Listen 지시자를 찾아 위와 같이 설정되어 있는지 확인한다. 다르다면 위 화면의 내용과 같이 수정해준다.

그리고 다음과 같이 VirtualHost 설정을 해준다. 마찬가지로 ServerName에는 호스트네임 + 도메인주소다.

여기까지 설정이 되었다면 아파치 웹서버를 재기동하고 무료 SSL 인증서인 Let’s Encrypt SSL 인증서 설치를 위한 준비가 완료되었다.

무료 SSL 인증서인 Let’s Encrypt SSL 인증서 설치

일반적으로 SSL 인증서를 발급받는데는 비용이 든다. 왜냐하면 SSL 인증서가 설치된 서버가 안전한 서버인지를 검증해주는 역할을 SSL 인증서를 발급해준 공인인증기관이 해주기 때문이다. 즉 SSL 인증서가 있는 서버에 이용자가 웹브라우저를 통해 접속하면 웹브라우저는 해당 서버에서 공개키가 포함된 인증서를 내려받게 되는데 이 인증서와 인증서를 보내준 서버의 도메인 주소 그리고 인증서가 발급된 도메인 주소가 일치하는지를 실시간으로 공인인증기관이 검증해주는데 그 검증에 필요한 비용이라고 보면 된다.

하지만 무료 인증서 서비스를 제공하는 비영리기관이 있으니 바 Let’s Encrypt 이다. 그리고 모질라재단, 구글, MS 등 많은 거대 IT 기업들이 스폰서 역할을 수행하고 있다. (우리나라 대깅버들은 이런 사회공헌 방식을 좀 배우길 바란다.)

이 Let’s Encrypt 인증서를 관리하는 패키지를 설치하기 위해서는 다음과 같이 EPEL 리포지토리를 등록해줘야 한다.

sudo dnf install epel-release

EPEL 리포지토리가 등록되었다면 Certbot 패키지를 포함한 Let’s Encrypt SSL 인증서 관리 패키지를 설치한다.

sudo dnf install certbot python3-certbot-apache

Https설정 13

Certbot 관련 패키지 설치가 잘 끝났다면 다음과 같이 Let’s Encrypt SSL 인증서를 발급받고 설치한다.

sudo certbot certonly –apache

관리자 계정 이메일 주소를 입력하고…

서비스 약관에 동의하라고 한다.

그리고 Apache 웹서버의 SSL 관련 설정이 잘 되어 있다면 다음과 같이 자동으로 SSL 인증서를 발급할 도메인주소를 찾아서 알려준다.

Certbot 명령 실행

도메인주소 앞의 번호를 찾아 입력하면 된다.

그 후에는 SSL 인증서를 발급받고 인증서와 키 파일이 어디에 저장되었는지 알려준다. 필요하다면 이 파일들을 백업해두면 된다.

Https설정 16

SSL 인증서가 잘 발급되었다.

이제 Apache httpd 서버를 재실행한 후 웹 브라우저에서 https:// 로 시작하는 서버의 도메인주소를 입력하거나 http:// 로 시작하는 도메인주소를 입력해도 모두 HTTPS가 적용되어 URL 앞에 자물쇠 표시가 나타나야 한다.

Https설정 18

만약 정상적으로 SSL 인증서가 발급되었는데 오류가 발생한다면 ssl.conf 파일을 찾아 다음과 같이 인증서의 경로가 잘 설정되었는지 확인해보면 도움이 될 수도 있다.

만약 이 설정이 제대로 되지 않았다면 적색에 표시된 인증서 파일이 제대로 생성되어 있는지 확인하고 있다면 이 화면과 같이 수동으로 설정해보면 정상적으로 동작할 수도 있다.

Good Luck…!!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다