ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Domain과 SSL 인증서 발급받고 적용하기
    Network & Hacking/Network 2019.08.24 15:39

    http가 https보다 취약하다는 것은 누구나 아는 사실이다.

    지금까지 프로젝트를 하면서 네트워크 패킷이나 웹에서 자주 마주쳤지만

    직접 웹을 구축할 일도 딱히 없었고 블로그의 경우도 버튼하나면

    자동으로 해줬다. 하지만 마침 도메인도 직접사고 SSL 인증서도

    직접 발급받아 https를 처음으로 적용해볼 시간과 좋은 기회가 생겼다. 



    따라서...




    이번에 포스팅할 내용은 SSL 인증서 적용하기이다.




    SSL 인증서를 발급받아서 적용하기 위해서는 도메인이 필요하다.

    나는 작년 한글날에 한글 도메인을 무료로 나눠주었던 hosting.kr에서

    필요한 도메인을 구매하였다.(추천추천!!)

    도메인을 구입하고 나서 도메인 관리를 보면




    네임서버(서브도메인)설정 관리가 있다. 이번에는 블로그에 사용할 것이 아니라

    Apache를 사용한 웹 서버의 IP주소와 구매한 도메인을

    연결할 것이기 때문에 다음과 같은 설정이 필요하다.




    첫 번째는 레코드 타입을 서브도메인으로 설정해주고

    서버 IP를 입력해준다. 우선순위는 10으로 설정해주자.



    두 번째로는 서브 도메인에 www를 입력해주고 별칭(CNAME)을 선택,

    IP주소가 아닌 도메인명 그대로를 입력해준다. 이렇게 하면

    example.com뿐 아니라 www.example.com도 접속이 가능해진다.



    신청을 누르면 1 ~ 2일 내로 적용이 완료된다고 한다.

    이렇게 도메인을 구매하고나서 이번에는 SSL 인증서를 발급받아보자.

    운이 좋게도 무료로 발급을 해주는 사이트를 알게되었다.



    securesign.kr



    인증서를 신청해보자~ 나는 Sectigo Free Trial을 이용했다.

    참고로 인증서 담당자를 선택하기 위해서는 좌측의 담당자 설정에서

    인증서 기본관리자 설정을 해주어야 다음단계로 넘어갈 수 있다.




    다음 단계에서는 

    본인이 구매한 도메인 주소를 적어주고 

    웹서버 종류를 선택해준다. 나는 Apache이므로 선택!

    다음 CSR의 경우는 자동생성이 있고 직접 입력 선택이 있는데

    이건 본인 자유이다. 나는 직접 선택을 사용해서 입력을 했다.




    openssl을 이용하면 누구나 간단한 명령어를 통해 만들 수 있다.

    cat 명령어로 CSR파일의 내용 전부를 복사해서 입력해주면 된다.




    다음 단계로 가면 자신의 도메인이 맞는지 인증을 해야한다.

    나는 http(s) 인증을 진행했고 인증에 필요한 파일을 다운받았다.





    다운받은 파일을 인증을 하기 위한 위치에 업로드해서 링크를 통해

    접속했을 시, 다운받은 파일과 동일한 내용이 보여지면 된다.

    여기까지 했다면 인증신청을 눌러주고 될 때까지 기다리면 된다.

    (자세하게 보여주고 싶지만 이미 구매해버려서.. 스크린 샷을 못찍었다..)

    (이 부분에서 살짝 헤매시는 분들은 댓글 달아주세요^^)




    도메인 본인 인증이 완료되면 SSL인증서를 발급해준다.

    역시 다운로드해서 이번에는 서버에서 셋팅해주자!!





    Apach 기준

    /etc/apache2/sites-available/ssl(원하는이름).conf 파일을

    생성해주어서 셋팅해주는데 .conf 파일을 처음부터 셋팅하기는

    번거로우니 기존에 존재하는 default-ssl.conf을 복사해서 사용하면된다.

    위의 사진처럼 다운받은 인증서파일을 옮겨서 셋팅을 진행해주면된다.

    ServerAdmin은 이메일 주소

    ServerName은 구매한 도메인 주소

    ServerAlias는 아까 했던 www.도메인주소

    DocumentRoot는 웹페이지 경로이다.



    SSLEngine이 on인지 확인해주고 나머지 셋팅을 하면된다.

    SSLCertifiateKeyFile은 CSR을 만들기 전의 private.key

    SSLCertificateFile은 인증서 파일

    SSLCACertificateFile은 루트인증서 파일

    SSLCertificateChainFile은 체인인증서 파일이다.

    이렇게 했는데도 제대로 안된다면 확장자를 맞춰주자.



    이렇게 진행하게되면 SSL인증서가 제대로

    적용되어 웹 페이지에서 https를 볼 수 있게 된다!! 




    SSL에 대해서




    이러한 https를 보는 것도 좋지만 한 가지 알아두면 좋은 것이 있다!!

    간략하게 설명하자면 굳이 SSL인증서를 발급하는 이유에 대해서이다.



    openssl을 이용하면 누구나 간단하게 인증서를 만들 수 있다.

    그렇다면 발급받는 인증서와는 무슨차이가 있을까??

    바로 "신뢰할 수 있느냐 아니냐"의 차이이다.

    즉, 신뢰할 수 있는 인증 기관에서 발급해주었는가의 차이이다.



    SSL 통신 과정 참고 : https://xn--vj5b11biyw.kr/3




    웹페이지에 접속한 사람은 SSL 3Way Handshaking 중 Sever Hello의 과정을 통해서

    서버로부터 인증서를 받게 된다. 받게된 인증서에는 소유자 정보, 용도, RootCA 정보와,

    public key, 유효기간, host명 등의 정보를 가지고 있는데 이때 RootCA정보를

    접속자의 브라우저에 있는 CA 리스트와 비교한다. 비교해서 일치하는 정보가 있다면

    일시적으로 신뢰할 수 있다고 판단하는 것이고, 없다면 아래와 같은 경고화면을 보게 될 것이다.

    결과적으로 openssl의 경우 인증서는 만들 수 있으나 신뢰할 수 있는

    기관이 발급한 인증서가 아니라 경고 화면이 뜨는 것이다. 



    하지만 해당 화면이 뜨는 이유는 이 밖에 여러이유가 있을 수 있다.

    CA 리스트에 없거나 발급 유효 기간이 만료되었거나 Host명이 잘못되거나 등의

    여러 이유가 있을 수 있고 SSL strip을 진행할 때도 이러한 화면을 보게된다.

    때문에 이러한 화면을 보게된다면 약간(?)의 의심과 조심해야할 필요가 있다.



    때문에 인증서를 다뤄야하는 개발을 한다면 인증서 피닝을 필수적으로 고려해보아야 한다.

    이 부분이 취약하면 SSL이 무용지물이 될 수 있기 때문이다.



    SSL에 대해서는 나중에 쉽게 다뤄보려고 한다ㅎㅎ



    댓글 0

Designed by Tistory.