이 블로그에는 계속해서 Mac OS X Server에 관한 이슈들을 포스팅하고 있다. 그 이유는 당연히 필자가 맥을 사용하기 때문이며, 절대로 Mac이 우월하다거나 좋아서가 아니다. 실제로 맥에서 무언가를 작업하려고 하면 대부분은 열받게 된다. 상당수의 유저들은 우분투 등의 리눅스를 기반으로 패키지 설치를 진행하기 때문에 맥에서는 될때도 있고 안될때도 있다. 묘하게도 안되는걸 되게 만드는 재미가 있다. 이번에도 성공했다.


일반적으로 웹서버를 운영하는 사람들은 거의 정석처럼 AMP(Apache, mysql, php)를 사용한다. Mac OS X 도 마찬가지이긴한데, 신기하게도 Server App이라는 별도의 애플리케이션 형태로 관리할 수 있도록 해준다.  

이미지 설명을 입력하세요.이미지 설명을 입력하세요.

아직 사용해본적이 없다면 앞으로도 절대로 사용하지 마시길 권유드린다 ...;;

무튼, 여기에서 Apahce 데몬을 관리하게 된다. 관련된 환경설정도 다 여기에서 처리한다.


자신의 웹 사이트에 접속하면 이상하게도 아래와 같은 오류가 뜬다.

왼쪽은 MS Internet Explorer, 오른쪽은 Google Chrome 브라우져의 SSL 오류왼쪽은 MS Internet Explorer, 오른쪽은 Google Chrome 브라우져의 SSL 오류
왼쪽은 MS Internet Explorer, 오른쪽은 Google Chrome 브라우져의 SSL 오류

문제는 SSL 인증서가 없어서 그렇다. SSL 인증서란 Secure Sockets Layer의 약자이며 자세한 정보는 위키백과나 베리사인 등의 업체에서 얻을 수 있다. 결론적으로 말하자면 웹브라우저의 통신 사이에서 암호화를 구현함으로써 기밀성을 보장하는 것이며, 동시에 서로가 상대방을 인증할 수 있도록 해준다. 요즘에는 거의 필수적으로 권고되고 있는 기술이다. 위와 같은 보안 인증서 문제가 표출되는 이유는, 맥에서 '자체 서명한' 인증서를 사용했기 때문이다. 

이미지 설명을 입력하세요.
이미지 설명을 입력하세요.

즉, "내가 그 서버다"라는 것을 공식적으로 인증받기 위해서는 신뢰할 수 있는 제3의 인물 또는 기관으로부터 서명검증을 받아야 한다. 이 경우에는 맥이 자체적으로 서명을 생성하였고, 이를 검증받지 못한 상황이기 때문에 방문자는 이 서버가 그 서버가 맞는지 믿을 수 없다. 사실 개인 홈페이지 운영하는 정도라면 (쓰는 사람이 자기밖에 없으므로) 그냥 경고를 무시하면 되긴 하지만..  갑자기 이걸 해보고싶은 의욕이 들어 이틀정도 삽질을 한 결과 이 문제를 해결할 수 있는 방법을 찾았다.



1. SSL 인증서 발급받기

 SSL 인증서는 인증서를 요청하는 법인의 신원과 적법성을 확인하도록 의뢰를 받는 조직인 Certificate Authorities (CAs)가 발급한다. 당연히 세상의 모든 것은 '돈으로' 해결할 수 있다;; ("얼마면 돼?") 구글이나 네이버에서 'SSL 인증서'로 검색하면 수많은 업체들의 링크가 제공된다. 유료인 경우는 논외로 하고, 본 포스팅에서는 무료로 사용할 수 있는 Let's Encrypt 에 대해 살펴보고자 한다. 사이트는 https://letsencrypt.org/ 이다. 그러나 사이트에 방문할 필요는 없다. 어쨌든 Let's Encrypt가 위에서 언급한 SSL 인증서를 발급해주는 무료 서비스이다. 단점이 있다면 갱신주기가 유료서비스에 비해 짧고, 이를 기억했다가 재발급해야된다는 것이다.

이미지 설명을 입력하세요.

이러한 과정을 조금 더 수월하게 해주기 위한 서비스가 등장했다. 바로 certbot이다. cetbot은 Let's Encrypt 의 인증서를 자동으로 관리해주는 도구이며 https://certbot.eff.org/ 에서 확인할 수 있다.

이미지 설명을 입력하세요.

해당 옵션에서 웹서버의 종류와 운영체제 종류를 고를 수 있다. 여기에서는 Apache 와 Max OS X 를 선택하였다. 그렇게하면 하단부에 설치 과정이 설명되어있다. 마치 명령어 고작 5줄 치면 될것처럼 써있지만 사실 그렇지가 않다 ㅠ ㅠ 여기에서 삽질 과정을 함께 공유해보도록 하겠다.


2. Letsencrypt설치

(기본적으로 brew와 pip 가 설치되어있어야 하며 이 과정은 생략한다.)

git 저장소에서 letsencrypt를 가져온다.

root 권한을 요구할 때가 많다
root 권한을 요구할 때가 많다

또는 brew를 통해 쉽게 설치할 수 있다. 

github을 통해 설치한 경우 해당 디렉토리에, brew로 설치한 경우 /usr/local/bin/letsencrypt 가 저장된다.


3. 인증서 생성

지금부터가 본격적으로 인증서를 생성하는 과정이다. 해외에서 3가지 정도의 블로그를 확인해보았는데 말이 약간씩 다르다. 어쨌든 여기에서는 각 경우를 적당히 취합하였으며 출처는 아래에 밝혀두었다.

우선 아래의 명령어를 수행한다. 여기에서 자신의 도메인 주소를 입력해야 한다. (www.test.xyz 는 예시) 또한 --debug 옵션을 꼭 주어야 한다. (없이 입력하면 --debug 입력하라면서 진행 안됨)

해외 블로그에서 '많은 사람들이 여기에서 막힌다'고 되어있었는데, 나도 그랬다;

이미지 설명을 입력하세요.

 우선 실행되면서 관련된 패키지들이 자동으로 함께 설치된다. 그리고 다음 화면에서 환경설정이 진행된다.

이메일 주소 입력(좌), 이용약관 동의(우)이메일 주소 입력(좌), 이용약관 동의(우)
이메일 주소 입력(좌), 이용약관 동의(우)

왼쪽의 이메일 입력화면에는 아무 이메일을 입력하는 것이 아니라, 도메인을 신청했을 때 사용했던 이메일을 입력해야만 한다. 기억이 나지 않는다면 KISA 에서 확인이 가능하다 : http://whois.kisa.or.kr/kor/

이미지 설명을 입력하세요.

해당정보를 입력하고 약관에 동의하면 다음 화면으로 넘어간다. 

이미지 설명을 입력하세요.

위의 파란 화면에서 Yes를 누르면 갑자기 아래의 화면이 뜨면서 멈춘다. 이 부분이 가장 중요하다. 이걸 이해하지 못해서 한참 삽질을했다.

이미지 설명을 입력하세요.

여기서는 그냥 Enter를 누르면 안되고!!!!!!!! 새로운 터미널 창을 띄워서 작업을 수행해야 한다. 자세히 읽어보면 아랫부분에 이러한 명령어를 입력하라는 내용이 써있다.(루트 계정으로)

그리고 vi 에디터를 사용하거나 printf 명령어에 > 를 사용해서 파일을 생성해야 한다. 이역시 터미널 윈도우에 표시되어 있다. (각자에게 표시되는 파일내용이 다르므로 이 내용을 그대로 복사하여 붙여넣지 말고, 본인의 터미널에 뜬 명령어를 입력할것) 즉, 웹 사이트의 root 경로(Mac의 경우 보통 /Library/Server/Web/Data/Sites/Default/) 에 파일을 생성해야 하며, 파일을 만들고 아까의 파란색 화면에서 Enter를 누르면 또 똑같은 과정이 한번 더 진행되어 총 2개의 파일을 만들어야 한다.

이후 Enter를 누르면 아래와 같이 인증서 파일들 생성에 성공했다는 메시지가 표출된다. (*만약 오류가 나면 Web Root가 다른 곳에 설정되어있거나, /tmp/certbot 쪽에다 생성해보심이..)

이미지 설명을 입력하세요.

성공적으로 인증서가 생성되었다면 /etc/letsencrypt 아래에 live 디렉토리가 생성되어 있다. 사실 live 디렉토리는 심볼릭 링크(윈도우의 바로가기)역할을 감당할 뿐이고, /etc/letsencrypt/archive 디렉토리에 원본 파일이 들어있다. 아마 갱신할 때 따로 고쳐주거나 옮기는 등 귀찮게 관리할 필요가 없게 하려고 링크기능을 사용하는 것 같다.


4. Server App에 인증서 적용

 이제 Mac OS X Server App에서 위에서 생성한 인증서를 적용하면 된다.


이미지 설명을 입력하세요.이미지 설명을 입력하세요.

인증서 탭에서 + 버튼을 누른 후 "신원 인증서 가져오기" 버튼을 클릭한다. 그러면 각 파일을 마우스로 드래그하라고 하는데, Finder를 열어서 Command + Shift + G를 누르면 디렉토리를 입력해서 바로 이동할 수 있다. "/etc/letsencrypt"로 간다. 이때 파일의 접근권한 문제 때문에 하위 디렉토리로 더이상 접근할 수 없는 문제가 발생한다. 마우스 오른쪽 클릭 후 자물쇠(변경금지 Lock)을 해제하고, '읽기 전용'권한만 부여해주면 된다. live 디렉토리와 archive 디렉토리 모두 읽기 권한을 주어야한다. 이후 live 디렉토리의 privkey.pem 을 개인키에, cert.pem을 공용 인증서  파일에, chain.pem을 기타 비신원 인증서에 등록한다. 성공하면 위와 같이 새로운 인증서가 추가되어있다.

웹서비스 뿐만 아니라 기타 다른 서비스에도 적용 가능하다.
웹서비스 뿐만 아니라 기타 다른 서비스에도 적용 가능하다.


이제 웹 브라우져에 접속해보면 https 가 적용되어있고 오류도 나지 않음을 확인할 수 있다.

이미지 설명을 입력하세요.

인증서의 정보 또한 신뢰할 수 있음으로 표시된다. 발급자는 Let's Encrypt Authority X3 이다.

이미지 설명을 입력하세요.


5. 인증서 유효기간에 따른 자동 갱신

다 좋았는데 한가지 아쉬운 점은 유효기간이 3개월 단위라는 것이다. 마감 즈음을 기억했다가 갱신하거나, 이를 넘겼으면 처음부터 다시 설정해야하는 귀찮음이 있다.


우선 renew 를 하는 방법에 대해 어떤 블로그에서는 다음과 같이 설명한다.


그 밖에, certbot 이라는 프로그램을 사용하여 자동화를 조금 더 쉽게할 수 있다고 한다. 이 방법을 선택해보았다. 설치는 다음과 같다.

설치가 완료되면 /usr/local/bin/certbot 에 실행파일이 생성되어있다. 기본적인 사용법은 아래와 같다.

이미지 설명을 입력하세요.

리뉴얼을 위해선 아래의 명령어를 사용한다.

입력해보니 아직 갱신주기가 도래하지 않았다면서 리뉴얼이 되지 않는다. 아마 마감일 직전의 어느 기간동안 갱신일정이 주어지는 것 같다. 공식 홈페이지를 보면 --dry-run 옵션을 사용해서 (실제로 갱신은 하지 않고) 리뉴를 테스트해보는 방법을 사용하는 방법을 알려준다.

이미지 설명을 입력하세요.

이걸  약간 수정해서, crontab 등의 스케쥴러에 탑재한다음 주기적으로 몇번씩 체크하는 로직을 구현하면 운영자가 아무런 신경을 쓰지 않아도 인증서 업데이트를 자동화할 수 있을 것으로 예상해본다. 아직은 2~3달의 기간이 남아있으니 우선은 패스.. 직접해보고 추후에 업데이트 하도록 하겠다.



+. 추가사항.(20161219)

Certbot 자동 리뉴얼이 안되서 결국 수동으로 다시 했다는.. 

위의 과정을 똑같이 다시 해서 인증서 파일을 생성한뒤, 맥 Server App에서 새 인증서 등록 후 새로운 걸로 설정을 변경하고, 기존것을 삭제하면 된다. 이걸 3개월에 한번씩하자니 좀 귀찮기도한데, 다행히 만료일이 1달정도 남았을 때 Server App에서도 메일이 오고, Let's Encrypt에서도 만료일이 다가온다는 알림을 준다. 까먹지 않고 제때에 잘 갱신하면 될듯.


6. Reference

Installing and Configuring LetsEncrypt on a Mac OS X Client Server - Help - Let's Encrypt Community Support

Lets' Encrypt로 무료로 HTTPS 지원하기 :: Outsider's Dev Story                                             

Configuring Web Site on OS X Server with certificate from Let's encrypt            

Let's Encrypt / Certbot을 이용해서 무료로 SSL 발급 및 자동 갱신하기 




CPUU님의 창작활동을 응원하고 싶으세요?