2015년 3월 3일 화요일

https 적용하기

https 적용하기

플랜

  1. https 인증서를 산다.
  2. 인증서를 로드 벨런서에 장착한다.
  3. 확인한다.

https 인증서를 산다.

  1. 인증서의 종류
    • 3개다 보안 정도는 똑같다 다만 추가적인 인증(회사존재 여부 등)을 하느냐 마는냐의 차이이며 실제로 다른 부분은 아래와 같다.
      EV 가 가장 비싸며 은행사이트 접속했을때 처럼 녹색 바에 회사 이름이 노출된다.
      DV, OV 는 상대적으로 저렴하며 https: 부분만 녹색으로 변한다.
    • DV Domain Validation (DV) SSL Certificates
    • OV Organization Validation (OV) SSL Certificates
    • EV Extended Validation (EV) SSL Certificates
  2. 인증 범위
    • 1개의 도메인을 보호 할것이냐? 하위 도매인을 보호할것이냐 ? 멀티 도매인을 보호할것이냐 에 따라 다르다.
      1개의 도매인 1 protect web site 구매
      멀티 도메인 n개의 도메인 (단 하위 도매인은 안됨) ex) aa.com aa.co.kr ee.aa.com
      하위 도메인 *.aa.com
    • 본인의 경우 두개의 wild card 도매인을 구입해서 사용했다 .aa.com, .aa.co.kr
    가격이 다르며 최초 1개 도매인으로 구입했다가 다른 도메인으로 변경 할 수 없다
  3. 사이트
    • 많다
    • starssl(메일 엄청 빨리 온다 1루도 안걸림)
    • starfieldtech (사이트가 이쁘기한대 비추다 이메일 문의가 느리다 3일 걸림)
  4. 참고
    • starssl이 공짜라고 실제로 인증서를 받을 도메인을 테스트한다고 인증 받지 말자..힘들어진다.
    • 자기혼자 싸인해서 ssl테스트 할수 있다.
      #키만들고
      $ openssl genrsa -aes128 -out fd.key 2048
      #키에서 공개 키만 뜯어 낼수도 있고
      $ openssl rsa -in fd.key -pubout -out fd-public.key
      #키에서 cert req 를 만들수도있
      $ openssl req -new -key fd.key -out fd.csr
      #확인하기
      $ openssl req -text -in fd.csr -noout
      #혼자 싸인하기
      openssl x509 -req -days 365 -in fd.csr -signkey fd.key -out fd.crt
      

인증서를 로드 벨런서에 장착한다.

  1. 왜 로드벨런서에 장착하는가?
    • 물론 서버에 직접 장착 할수도 있다. 노드 나 스프링 등등 하지만 로컬 개발 등 테스트를 생각하면 로드 밸런서에 설치후
    • 포워딩 시키는게 훨씬 편하다. 필자의 경우 nginx 를 사용했다.
    • 또한 안드로이드, ios 등 모바일 지원에 버전관리까지 들어가기 시작하면.....
    • 정말 그러면 좋겠지만.. 유저가 미친듯이 폭주하면.... 
    • 등등 여러 이유로 로드 벨런서에 꼭 장착하자
  2. nginx.conf
    • 위의 ssl 부분을 집어 넣으면된다.
      server {
           listen          443 ssl;
           keepalive_timeout   70;
           server_name *.aa.com;
           ssl_certificate     /etc/nginx/ssl/aa.com crt;
           ssl_certificate_key /etc/nginx/ssl/aa.com.key;
           ssl on;
           ssl_session_cache  builtin:1000  shared:SSL:10m;
           ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
           ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
           ssl_prefer_server_ciphers on;
           location / {
                   proxy_set_header Host $host;
                   proxy_set_header X-Real-IP $remote_addr;
                   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   proxy_redirect off;
                   break;
           }
      }
      
  3. 인증서의 경우 싼곳일 수록 체인형식으로 인증서를 연결해 줘야 할때가 많다.
    • 왜 연결해 줘야 하는가? 예전 브라우저의 경우 신규 인증 업체를 모르기 때문이다.
      #cat cert1.crt cert2.crt > chained.crt
      #openssl x509 -noout -modulus -in  cert.crt | openssl md5
      #openssl rsa -noout -modulus -in chained.key | openssl md5
      

확인한다.

  1. 참고로 heartbleed 버그 때문에 nginx 1.6 이상 openssl 1.01 이상에서 ssl 을 사용하자
  2. 추천도서 : 네트워크 보안관련 도서 중 최근에 발간되었고 설명이 상세하게 잘 나와 있다.