도메인 SSL 적용

Daniel Seo·2021년 5월 28일
1

Index

  • SSL 이란?
  • SSL 발급
  • SSL 적용

SSL 이란?

HTTP 와 HTTPS

예전에는 대부분 http://~ 로 시작하는 사이트가 대부분이었지만 현재는 전부 https:// ~ 로 시작하는 URL로 주소가 이루어져있습니다. 이는 우리가 접속하는 컴퓨터 또는 휴대폰이 해당 사이트의 서버와 암호화 통신을 하고 있다는 것을 의미합니다. HTTPS는 뒤에 s가 붙어 있고 이는 '보안(Secure)'을 의미합니다.

SSL (Secure Socket Layer)

통신 프로토콜의 HTTP의 보안을 강화해 HTTPS가 탄생하게 되었습니다.
(이미지 출처 : https://blog.naver.com/skinfosec2000/222135874222)

SSL은 '보안 계층'이라는 독립적인 프로토콜 계층을 만들어, 그림과 같이 응용 계층 (HTTP, FTP..)과 전송 계층 (TCP 등) 사이에 속하게 됩니다. 즉, HTTPS는 SSL 위에 HTTP 프로토콜을 얹어서 보안된 HTTP 통신을 하는 프로토콜입니다. 마치 종이로된 택배박스로 물품이 배송되다가, 자물쇠가 걸린 철통박스로 바뀌는 것과 같죠.

SSL 발급

SSL 발급의 주체는 여러 군데가 있지만 무료로 받을 수 있는 사이트가 있어 아래 사이트에서 발급을 받았습니다.

발급 사이트 : https://letsencrypt.org/ko/docs/

Wildcard 인증서 발급

와일드카드 인증서는 Domain의 호스트 단위에서 여러 서브 도메인까지 지원하는 인증서입니다. 예를 들어 abc.com이란 도메인의 서브 도메인인 dev.abc.com, test.abc.com 등을 함께 적용하고자 할 때 와일드카드 인증서를 발급합니다. 이 인증서를 발급하기 위해서는 도메인 서버를 다루거나 호스팅 기관의 도메인 관리도구를 통해서 'DNS 레코드'에 부가적인 정보를 추가해야 합니다.

SSL 적용

SSL 발급을 진행하고나면 'SSL 인증서' 파일과 '개인키' 파일이 저장됩니다. 이 두가지 파일을 가지고 nginx 서버 설정에 구성을 하면 됩니다.

아래는 nginx 의 default.conf 내용입니다.

server {
    listen 443 ssl http2 default_server;
    server_name abc.com;
	
    ### 인증서 파일 ###
    ssl_certificate /usr/share/nginx/ssl/abc.com.pem;
    ### 개인키 파일 ###
    ssl_certificate_key /usr/share/nginx/ssl/abc.com.priv.pem;
    ### SSL 활성화 ###
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1.1 TLSv1.2;
	
    
    ### 모바일 접속하면 m.abc.com으로 redirect ###
    set $mobile_rewrite do_not_perform;
    if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|mobile.+firefox|netfront|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ ce|xda|xiino [NC,OR]") {
        set $mobile_rewrite perform;
    }
    if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]") {
        set $mobile_rewrite perform;
    }
	
    if ($mobile_rewrite = perform) {
        rewrite ^ https://m.abc.com$request_uri? redirect;
        break;
    }
	
    
    ### 페이지 소스가 위치한 곳 ###
    root /usr/share/nginx/html;
    index index.html index.htm;
}

HTTPS (port 443)에 설정을 다 했으면, 기존 HTTP로 접속하던 유저들을 HTTPS로 돌리기 위해서 Redirect를 시켜주어야 합니다. 해당 내용은 아래와 같습니다.

server {
    listen 80;
    server_name abc.com;
    ### http로 접근했으면 https로 redirect를 시킨다. ###
    return 301 https://$server_name$request_uri;

}

위와 같이 Nginx 설정을 적고, 재시작을 하면 제대로 구동되는 것을 확인할 수 있습니다.

profile
배움을 나누는 개발자입니다

0개의 댓글