UniFi - 맥 OSX 키체인 어시스턴트와 OpenSSL을 사용하여 컨트롤러 커스텀 SSL 사용하기

download at 2016-11-27T04:58:28Z origin

Overview


이 문서는 사용자가 사파리 웹 브라우저에서의 웹소켓 에러 이슈를 우회하는 방법에 대하여 서술합니다.

이슈의 원인은 기본 SSL 인증서를 신뢰하지 않는 차원을 넘어선 문제입니다. (인증서 신뢰하지 않는 문제 단독으로는 이 이슈가 발생하지 않습니다.) 자신 고유의 인증서 (CA)를 생성하고 기본 인증서를 새로운 인증서로 교체한다면 해당 웹소켓 에러를 우회할 수 있습니다.

시작하기 전에: OpenSSL과 맥 OSX가 구동하고 있는 컴퓨터가 필요합니다.

간단히 하면, 다음의 과정을 거치게 됩니다:

  1. 인증서를 생성합니다.
  2. 생성한 인증서에 서명합니다.
  3. 인증서와 개인키를 내보냅니다.
  4. 인증서데이터를 파일로 생성합니다.
  5. 해당 인증서 파일을 라우터에 업로드하고 기본 인증서를 생성한 인증서로 교체합니다.

Steps


이제, 각 단계를 상세하게 살펴보겠습니다:

1. 인증서를 생성

키체인 어시스턴트를 인증서 생성에 사용합니다. OpenSSL가 확인 할 것이지만, OS는 해당 CA를 자동으로 신뢰하게 하고 싶습니다.

  1. 키체인 어시스턴트를 실행합니다.(Applications > Utilities > Keychain Assistant)
  2. 메뉴에서 "Certificate Assistant" 메뉴를 선택하고 "Create a Certificate Authority..."를 선택합니다.
  3. 페이지에서 요구사항을 입력합니다. a) CA이름을 설정합니다. (이름을 기억하세요) b) 인증 타입(Identity Type) = Self Signed Root CA (기본값 입니다.), c) 사용자 인증(User Certificate) = SSL Server d) "Let me override defaults" 를 체크합니다. e) (선택) "Make this CA the default"  를 체크해제 합니다. f) (선택) "Email from" 필드 값을 본인의 이메일로 변경합니다. g) "Continue"를 선택합니다.
  4. 첫 "Create Information" 페이지에서 a) Serial Number = 1 b) Validity Period (days) = 3650 으로 설정합니다. (이 값을 원한느 값으로 설정할 수 있습니다. 요휴 기간이 지난 이후에는 다시 수행해야합니다.) c) 선택사항: "Create a CA web site"를 체크하고, 장소를 설정합니다. d) "Sign your invitation" 를 체크 해제합니다. e) "Continue" 를 선택합니다.
  5. 두번 째 "Create Information" 페이지에서 a) 요청하는 상세 정보를 입력하고, 다음 페이지로 이동합니다.
  6. "Key Usage Extension for this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  7. "Key Usage Extension for this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  8. "Key Usage Extension for Users of this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  9. "Extended Key Usage Extension for this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  10. "Extended Key Usage Extension for Users of this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  11. "Basic Constraints Extension for this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  12. "Basic Constraints Extension for users of this CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  13. "Subject Alternate Name Extension for This CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  14. "Subject Alternate Name Extension for Users of This CA" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  15. "Specify a Location Certificate" 페이지에서 a) 선택사항: Keychain (꼭 기억하세요) 의 위치를 변경합니다. b) "On this machine, trust certificates signed by this CA" 를 체크합니다. c) Create를 선택합니다.

2. CA가 생성한 인증서를 생성합니다.

키체인 엑세스에서...

  1. CA에서 저장한 키체인을 찾아서 개인키를 찾습니다. (3개의 동일한 이름을 가진 아이템이 존재합니다. 인증서, 공개키, 개인키)
  2. "Private key"에 오른쪽을 클릭하여 "Create a certificate with..." 를 클릭합니다.
  3. "Create your Certificate" 페이지에서 a) 이름을 명명합니다. 라우터의 호스트 네임 등을 추천합니다. b) Identity Type = "Lead" c) Certificate Type = "SSL Server" d) "Let me override defaults"를 체크합니다. e) continue 클릭
  4. "Certificate Information" 페이지에서 a) Serial number = 1 b) Validity Period (days)  = 365 (원하는 기간만큼 설정할 수 있지만 유효기간이 지나면 다시 생성해야합니다) c) continue 클릭
  5. second "Create Information" 페이지에서
  1. 요청하는 상세 정보를 입력하고, 다음 페이지로 이동합니다.
  1. "Key Usage Extension" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  2. "Extended Key Usage Extension" 페이지에서 a) "SSL Server Authentication" 체크 b) 다른 모든 옵션은 체크 해제
  3. "Basic Constraints Extension" 페이지에서 a) 값을 수정하지 않고 다음으로 이동힙니다.
  4. "Subject Alternate Name Extension" 페이지에서 a) rfc822Name 값 삭제 b) URI 값 삭제 c) dNSName = GUI에서 확인 한 url/hostname (예) ubnt.local d) iPAddress = GUI의 IP 주소
  5. "Specify a Location Certificate" 페이지에서
  1. 선택사항: Keychain (꼭 기억하세요) 의 위치를 변경합니다.
  2. Create 선택

 3. 인증서와 개인키 내보내기

  1. 인증서를 저장한 키체인으로 이동하여 개인키와 인증서를 찾습니다.
  2. 인증서에 오른쪽 클릭하여 내보내기 선택 a) 파일로 저장 (파일명과 장소를 기억합니다)
  3. 개인키에 오른쪽 클릭하여 내보내기 선택 a) 파일로 저장 (파일명과 장소를 기억합니다)

4. 인증서 파일 준비하기

본 문서에서는 OpenSSL을 사용하였습니다. 다른 인증서는 다른 방법을 사용할 수도 있습니다.

커맨드라인 인터페이스의 지식이 있다고 가정합니다.

  1. 터미널을 실행합니다.
  2. 선택사항: 인증서와 개인키가 있는 경로로 이동합니다.
cd path_to_files
  1. 인증서 파일을 pem 파일로 변경합니다.
openssl x509 -inform der -in certificate.cer -out certificate.pem
  1. 개인키를 pem 파일로 변경합니다.

    openssl pkcs12 -in privateKey.p12 -out privateKey.pem -nodes
    
  2. 두개의 파일을 하나로 병합합니다.

    cat privateKey.pem certificate.pem > server.pem
    

5. 라우터에 인증서 업로드하기

터미널에서

  1. 라우터에 SSH로 접속합니다.

    ssh router_ip_address -l your_user_name
    
  2. 라우터에 폴더를 생성하고, 적절한 권한을 부여합니다. (이 문서에서는 홈폴더를 사용합니다.)

    cd /home
    sudo chown your_user_name your_user_name
    
  3. 새로운 터미널을 생성합니다.

  4. 새로운 터미널에서 라우터로 파일을 복사합니다.

    scp server.pem your_user_name@router_ip_address:~/server.pem
    
  5. 이전 터미널에서 파일의 소유주를 변경합니다.

    sudo chown www-data:www-data ~/server.pem
    
  6. (선택) 이전 윈도우에서 기본 인증서를 백업합니다.

    sudo cp /etc/lighttpd/server.pem ~/server.pem.backup
    
  7. 기존 인증서를 덮어쓸 수도 있습니다.

    sudo cp ~/server.pem /etc/lighttpd/server.pem
    
  8. 새로운 인증서에 적절한 권한을 부여합니다.

    sudo chmod 400 /etc/lighttpd/server.pem
    
  9. lighttpd 를 재시작합니다.

sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
  1. 테스트를 해봅니다!

도움이 되는 포스트:

http://community.ubnt.com/t5/EdgeMAX/Custom-SSL-Certificates/td-p/405628 http://community.ubnt.com/t5/EdgeMAX/Replacing-the-self-signed-SSL-certificates/td-p/381481 http://community.ubnt.com/t5/EdgeMAX/Problem-with-lighttpd-and-server-pem/td-p/771390 https://www.sslshopper.com/article-most-common-openssl-commands.html http://www.techrepublic.com/blog/apple-in-the-enterprise/create-your-own-ssl-ca-with-the-os-x-keychain/>