본문 바로가기

Academy I/Tech Academy

Windows 배포시 전자 서명

이번에 리멤버 Windows 데스크톱 버전을 개발하면서 처음으로 exe 파일로 설치 파일을 만들고 웹에 배포해 보았습니다. 이 글에서는 처음으로 설치 파일을 웹에 배포하는 과정 그리고 예상하지 못했던 난관에 대하여 설명해보려 합니다.


앱 개발을 완성하고 설치 파일까지 만들었다고 모든 것이 끝났다고 생각하시면 안됩니다. 별 생각 없이 설치 파일을 웹에 게시하고 웹페이지에서 다운을 받으면 다음과 같은 화면들을 만나게 됩니다.



<이 파일은 위험해!>



<Windows 설치 때 한 번 더 뜨는 경고..>



<Chrome도 예외는 아닙니다>



만약 사용자들이 이런 메시지를 본다면 기껏 열심히 만들어 놓은 앱이 악성 프로그램 취급받게 될 것입니다. 자, 앱 개발은 끝났을 지라도 앱 배포는 이제부터 시작입니다. 이 배포에 걸리는 시간은 생각하는 것보다 오래 걸립니다.

 

전자 서명

배포를 하기 위하여 제일 먼저 해야할 것은 전자 서명입니다. 전자 서명의 원리 설명은 네이버 개발자 블로그에 친절하고 자세히 나와 있습니다. 간략하게 설명을 하자면, 코드 서명 인증서(Code Signing Certificate)를 가지고 서명한 파일은 내가 만든 파일임을 인증해주는 원산지 표시와 비슷합니다. 예를 들어 해커들이 리멤버와 똑같이 생긴 악성 설치파일을 만들어서 리멤버인 것처럼 배포를 하여도 드라마앤컴퍼니가 만들었다는 인증서가 없으므로 사용자들은 위험한 파일임을 알 수 있습니다.


전자 서명을 하기 위해서 처음으로 해야 할 일은 코드 서명 인증서를 구하는 일입니다. 아쉽게도 전자 서명은 무료가 아니라 유료로 Symantec과 같은 인증서 발급 업체에서 회사 혹은 개인 정보를 인증받고 코드 서명 인증서(Code signing certificate)를 구매해야 합니다.


인증서 종류도 표준(Standard)과 EV로 두 가지 종류가 있습니다. MSDN에서 표준과 EV 인증서의 차이, 그리고 구매 방법들에 대하여 읽어보실 수 있습니다. EV 인증서가 가격이 더 비싸며 대부분의 경우에는 표준을 사용하셔도 무방합니다.


이제 구매한 인증서와 MS에서 제공하는 SignTool.exe를 가지고 우리가 만든 프로그램을 서명합시다. SignTool에서는 다양한 인자들을 제공하는데 API 문서를 읽어 보시고 필요한 부분들을 사용하시면 됩니다. 저의 경우에는 다음 인자들을 사용했습니다.



이렇게 서명을 완료하면 다음과 같이 뭔가 부족해 보이던 설치파일이





다음과 같이 든든하게 변합니다.





<올.바.른. 인증서입니다.>



그렇다고 이제 끝일까요? 저도 여기서 끝이라고 생각했습니다.. 이렇게 파일을 다시 서버에 올려서 다운 받아도 마찬가지로 IE와 Chrome은 여전히 우리의 파일을 위험하다고 얘기합니다. 서명이 잘못되었나.. 설마 비싼 인증서 잘못 구매한 건가.. 하루 종일 구글링을 하고 이곳 저곳에 수소문해봐도 명쾌한 답이 나오지 않았습니다. 그러다 결국은 설마 했던 ‘명성이 부족하다’라는 결론을 내리게 되었습니다.

 

명성치

MS의 SmartScreen filter는 인증서들에 대한 자체적인 white list DB를 관리하며 해당 인증서가 안전한지 아닌지 판단합니다. 새로 등록된 인증서로 만들어진 파일이 일정 횟수 이상, 일정 기간 이상 동안, 일정 사용자들에게 다운로드 되고, 신고 건수가 없어야 안전한 파일로 white list에 등록합니다(SmartScreen filter는 원래 IE에 존재하던 기능이었다가 Windows 8부터는 OS 자체 기능으로도 추가되었습니다). Google의 Chrome도 이와 비슷한 로직을 가지고 있습니다.


즉, 일정 수준을 명성을 쌓기 전까지는 위험한 프로그램 취급을 하여 사용자들에게 경고 메시지를 보여 줍니다. 하지만 여기서 답답한 부분은 필요한 ‘다운로드 수’, ‘다운로드 인원’, ‘처리되는 기간’ 등 중요한 정보들이 공개 되어있지 않다는 것입니다.


저희는 회사 직원(약 25명)에게 Chrome과 IE로 다운로드 요청을 몇차례에 걸쳐서 했습니다. IE의 SmartScreen은 처음 전사원이 받은 후 이틀 뒤에 통과됐습니다. 그리고 다시 전사원이 다운로드를 받았고 약 1주일 뒤에 Chrome에서 통과했습니다.  그 이후로는 일부 사용자들에게 미리 공개를 하여 받게 했습니다.


Windows 8 이상부터 생긴 OS자체의 ScreenFilter는 꽤 오랜 시간이 걸렸던 것 같습니다. 확실한 방법과 시간은 알 수 없지만 여유롭게 약 2~3주간 소수의 베타 테스터들에게 뿌려야 하는 시간을 염두해야 할 것 같습니다(누군가 위험판 프로그램이라고 신고를 하지 않는다는 가정하에).

 

마무리

주위에 Windows 개발자 분들도 찾기 힘들지만 ‘최초로 인증서를 발급받아 배포를 경험’해본 분은 더더욱 찾기 힘들어서 많은 애를 먹었습니다. 사실 아직도 불확실한 시간에 무작정 기다려야 한다는 것 자체가 매우 마음에 들지는 않습니다. 그리고 인증서가 만료되어 새로운 인증서를 발급받으면 이 과정을 똑같이 한 번 더 거쳐야 하므로 이왕이면 유효기간이 긴 인증서를 사용하지 게 좋을 것 같습니다. 마지막으로 저희는 이렇게 인증을 받았지만, 이 방법을 제가 잘못 알고 있는 것이라면 꼭 알려주시면 감사하겠습니다  (개인적으로는 꼭 더 효율적인 방법이 있었으면 합니다).

 



참고 링크

MSDN 블로그의 스마트 스크린과 코드 서명 이야기

http://blogs.msdn.com/b/ie/archive/2012/08/14/microsoft-smartscreen-amp-extended-validation-ev-code-signing-certificates.aspx

‘Chrome도 몇 일 기다리면 된다’ 라는 토의 thread

http://blogs.msdn.com/b/ie/archive/2012/08/14/microsoft-smartscreen-amp-extended-validation-ev-code-signing-certificates.aspx





[출처 : http://blog.dramancompany.com/2015/12/%EC%B2%98%EC%9D%8C-windows-%EC%84%A4%EC%B9%98-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EB%B0%B0%ED%8F%AC%ED%95%98%EB%8A%94-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%93%A4%EC%9D%84-%EC%9C%84%ED%95%98%EC%97%AC/]