티스토리 뷰

개인 공인 인증서를 이용한 Code sign

얼마 전에 은행용 용도제한 공인 인증서를 갱신하고 인증서 정보를 확인 하던 중에 재미있는 사실을 알아냈습니다.
무료 용도제한 공인인증서로 코드사인이 가능하다는 사실...
 
KISA 루트 인증서가 XP SP2이후에 기본으로 윈도우에 탑재되었다는 사실은 관련 업무를 하시는 분들은 아마 알고 계실겁니다.
따라서 발급자(은행 발급 공인인증서의 경우 금융결제원) 인증서를 설치(인증서 더블클릭해서 설치)하고 나면 개인용 인증서의 정보를 볼수 있습니다. (아래 그림)

그런데 그림에 표시한 부분에 보면 '발급한 후 소프트웨어가 변조되는 것을 방지합니다.' 항목이 있습니다.
이것이 코드사인을 위한 부분이죠. 인증서 용도 중에 전자 서명용이 들이있으면 가능한 항목이니 그리 대단할건 없는데...
 
그럼 코드 사인을 해볼까요.
 
1. 인증서 설치
먼저 인증서를 윈도우 인증서 저장소에 넣어야 합니다.
자신이 사용하는 은행 인터넷 뱅킹 사이트에 가셔서 인증서 내보내기(pfx 만들기)기능으로 인증서를 pfx파일로 만드세요.
이 파일을 더블클릭하여 인증서 저장소에 저장하시면 발급자 인증서 및 개인 인증서가 윈도우 인증서 저장소에 저장됩니다.
 
2. Visual Studio를 이용한 코드사인
VS의 프로젝트 속성에서 '구성속성/빌드 이벤트/빌드 후 이벤트' 화면의 명령줄 항목에 아래 내용을 넣습니다.
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\signtool.exe" sign /n "김진환(JIN HWAN KIM)" /t http://timestamp.verisign.com/scripts/timestamp.dll "$(TargetPath)
(참고로 코드사인을 위해 signcode.exe를 주로 이용하셨겠지만 .NET Framework 2.0 출시 이후에는 signtool.exe를 사용하도록 Microsoft에서 권장하고 있습니다. )
"김진환 ..."에는 본인의 인증서의 발급 대상(subject, 위 화면에서 확인하시면 됩니다.)을 넣으세요.
이렇게 하시고 프로젝트를 다시 빌드 하시면 결과 exe,dll 파일이 자동으로 코드사인 됩니다.
인증서를 저장소에 넣으실때 암호로 보호 옵션을 선택하셨다면 인증서 암호 확인 화면이 나옵니다.
 
3. Code Sign 확인
코드사인이 된 exe,dll의 속성(등록정보)을 확인해보시면 '디지털 서명' 탭이 생긴것을 확인할 수 있습니다.
 
참고로 명령줄에 /t http://... 부분을 제거하시면 타임스탬프가 없는 전자 서명이 가능합니다.
타임스탬프가 없는 코드사인의 경우 인증서의 유효기간이 지나면, 서명자체가 무효화 되므로 임시 데모버전 등에 사용할 수도 있을듯 합니다.
 
4. 배포 파일(msi, cab)의 서명
VS를 이용한 배포파일 서명의 경우 프로젝트 속성 창에서 Authenticode 서명 란에서 '저장소에서 선택' 버튼을 클릭한 후 내 인증서를 선택해주시면 됩니다.
단 이 경우에는 타임스탬프가 포함되지 않아서 인증서 유효기간이 지나면 사용할 수 없습니다.(왜 VS 내에 타임스탬프를 지정하는 기능을 넣지않았는지는 의문입니다.)
따라서 cab이나 msi파일을 만든 후 별도로 배치파일 등을 이용해 서명하는 것을 권장합니다. 배치파일 만드는 법은 2번 항목의 명령줄을 참고하시면 됩니다.
 
5. 서명된 모듈의 사용
예전에는 주로 ActiveX 배포를 위해 cab 파일에 전자서명을 이용했지만, XP SP2, Vista 이후에는 최초 모듈 로드(실행)시에도 실행 모듈의 전자 서명을 확인하기 때문에 경고 메시지를 줄이기위해 많이 사용하시죠?
위 절차를 이용하여 만드신 모듈을 cab으로 배포하거나 실행시키면 내 인증서로 서명되었다는 안내 메시지를 보실수 있습니다.
단 해당 모듈을 다운로드 받아 실행하는 OS가 XP SP2 이상인 경우에 한해서요. 그 이하 버전의 윈도우의 경우 KISA 루트 인증서를 인증서 저장소의 '신뢰할 수 있는 루트 인증기관'에 저장해주시면 됩니다. (XP SP2 이상의 경우 타 베리사인 등의 인증서 등과의 차이없이 그대로 사용하실수 있습니다.)
약간 제약이 있기는 하지만, 공짜 인증서로 코드사인을 하실수 있는게 어디에요?(코드사인용 인증서 비쌉니다.) 게다가 내 이름의 인증서로요. 그렇죠?
 
PS. 국내 전자 서명법으로는 용도제한용(무료) 인증서는 지정된 다른 용도외에는 사용할 수 없도록 되어있습니다. 그렇다면 이 경우에 처벌대상이 되는지는 잘 모르겠습니다.
코드사인 후 상업적 용도로 사용하셨을 때 발생할 수 있는 법률적 문제에 대해서는 제가 책임질수는 없습니다.
하지만 범용인증서(유료)의 경우에는 모든 용도에 사용이 가능하도록 되어있으니 상용제품에 사용해도 문제가 없을듯합니다.
댓글