코드 서명(Code Signing)이란?
코드 서명은 디지털 서명 기술을 사용하여 소프트웨어의 진위와 무결성을 보장하는 과정이다.
즉, 개발자가 자신의 애플리케이션에 서명을 함으로써, 사용자는 이 애플리케이션이 신뢰할 수 있는 출처로부터 제공되었으며, 다운로드한 후 코드가 변경되지 않았음을 확인할 수 있다.
코드 서명이 중요한 이유
- 신뢰성 확보: 사용자는 서명된 소프트웨어를 실행하기 전에 출처가 신뢰할 수 있는지 확인할 수 있다.
- 보안 유지: 악의적인 소프트웨어가 자신을 정상적인 프로그램처럼 위장하려 할 때, 코드 서명은 이러한 위협으로부터 사용자를 보호한다.
- 경고 메시지 감소: 윈도우 같은 운영 시스템에서는 서명되지 않은 프로그램을 실행할 때 경고 메시지를 표시하는데, 서명된 애플리케이션은 이러한 경고 없이 더욱 쉽게 실행할 수 있다. (경고메세지 뜨면 괜찮아요 받으세요! 해도 꺼려질 수 있는기마련 ㅠㅠ)
코드 서명 과정
- 인증서 구입: 우선, 코드 서명을 위한 디지털 인증서를 구매해야 한다. 이 인증서는 Comodo, DigiCert 같은 공인된 인증 기관(CA)에서 발행한다. 인증서는 개발자의 정체성을 증명하고, 개발자가 코드에 서명할 때 사용되는 고유한 디지털 키를 포함한다.
- 애플리케이션 서명: 인증서를 사용하여 애플리케이션 파일(EXE)에 서명합니다. 이는 일반적으로 signtool과 같은 도구를 사용하여 수행된다. 코드에 서명하는 것은 마치 봉투를 밀봉하는 것과 유사하며, 봉투가 개봉되거나 변경되면 서명이 무효화된다.
- 타임스탬핑: 서명 시 타임스탬프를 추가하면, 인증서의 유효 기간이 만료된 후에도 서명이 유효함을 보장한다. 이는 타임스탬프 서버를 통해 이루어지며, 코드가 서명된 정확한 시간을 기록한다.
- 배포 및 검증: 서명이 완료된 후, 소프트웨어를 사용자에게 배포할 수 있다. 사용자는 자신의 시스템에서 이 소프트웨어를 실행하기 전에 자동으로 서명을 검증하여, 소프트웨어가 변조되지 않았음을 확인할 수 있다.
코드서명의 유형
특징 | 표준 코드 서명 (Standard Code Signing) | 확장 검증 코드 서명 (EV Code Signing) |
신원 검증 수준 | 낮음. 조직의 기본 정보만 요구함. | 높음. 조직의 법적, 물리적, 운영적 존재를 철저히 검증함. |
신뢰성 획득 속도 | 일반적으로 느림. 사용자와의 신뢰를 쌓기 위해 시간이 필요함. | 빠름. EV 인증서로 서명된 소프트웨어는 운영체제와 브라우저에서 더 빠르게 신뢰를 획득. |
보안 강화 | 표준적. 개발자가 소프트웨어 서명을 위해 보안 키를 관리함. | 강화된 보안. 하드웨어 보안 모듈(HSM)을 통해 보안 키 관리. |
비용 | 비교적 저렴. | 높음. 추가적인 보안과 검증 절차로 인해 비용 상승. |
프로세스 간소화 | 간단하고 빠름. 신속하게 인증서 발급 가능. | 복잡하고 시간 소요됨. 상세한 검증 절차 필요. |
사용자 경고 감소 | 일반적으로 일반 서명보다 낫지만, 초기 다운로드 시 경고 메시지가 발생할 수 있음. | 경고 메시지가 거의 발생하지 않음. SmartScreen 필터 등의 보안 기능에서 즉각적인 신뢰 제공. |
선택 방법
- 소규모 개발자나 스타트업은 비용과 절차의 간소화를 위해 표준 코드 서명 인증서를 선택
- 대규모 기업이나 보안에 민감한 소프트웨어를 제공하는 개발자는 더 높은 신뢰성과 보안을 위해 EV 코드 서명 인증서를 선택
코드 서명 유형을 선택할 때는 자신의 비즈니스 요구, 예산, 그리고 사용자 기대를 고려해야 한다.EV 코드 서명은 비용이 더 들고 절차가 복잡하지만, 신뢰성과 보안에서는 훨씬 우수하다.
실습
1. 코드 서명 인증서 획득하기
코드 서명을 시작하기 전에, 먼저 유효한 코드 서명 인증서를 구입해야 합니다. 다음과 같은 인증 기관에서 인증서를 구입할 수 있습니다:
- Comodo
- DigiCert
- GlobalSign
- Symantec 등
이들 인증 기관은 다양한 보안 수준과 가격대를 제공하므로, 개발자의 요구사항에 맞는 인증서를 선택하시기 바랍니다.
2. 인증서로 코드 서명하기
인증서를 받았다면, Microsoft의 signtool을 사용해 EXE 파일에 서명할 수 있다. 이 도구는 Windows SDK와 함께 제공되므로, 필요한 경우 Microsoft 웹사이트에서 SDK를 다운로드하여 설치해야 한다.
다운로드
https://developer.microsoft.com/ko-kr/windows/downloads/sdk-archive
문서
https://learn.microsoft.com/ko-kr/dotnet/framework/tools/signtool-exe
서명 과정
- 명령 프롬프트를 열고 signtool 명령어를 입력
- 다음과 같은 형식으로 명령을 구성하여 실행. 여기서 /t 옵션은 타임스탬프 서버 주소를 지정하며, 이는 코드 서명이 유효한 기간을 증명하는 데 필요하다.
- 다음 명령어 실행
signtool sign /f [인증서 경로.pfx] /p [인증서 비밀번호] /t http://timestamp.digicert.com /a [대상 EXE 파일 경로]
/t 옵션은 타임스탬프 서버 주소를 지정하며, 이는 코드 서명이 유효한 기간을 증명하는 데 필요
3. 배포 전 검증하기
다음 명령을 사용하여 서명을 검증
signtool verify /pa /v [대상 EXE 파일 경로]
4. 사용자에게 배포하기
웹사이트 다운로드, 클라우드 공유 서비스, 또는 USB 드라이브 등을 통해서 사용자에게 배포
정리
- digiCert(신뢰성 높고 비쌈, 규모 있는 기업들에서 사용) - 표준 코드 서명 : 577달러 | 확장 코드 서명 744달러 | https://www.digicert.com/signing/code-signing-certificates#code_signing_own_hardware_token
- Comodo (제일 저렴, 소규모 기업에서 사용)- 표준 코드 서명: 429달러 | 확장 코드서명 : 498달러 | https://www.sectigo.com/ssl-certificates-tls/code-signing
Comodo 사용하는게 무난할듯
'🩵electron' 카테고리의 다른 글
apple 개발자 계정으로 macOS application 코드서명+공증 하기(code sign, notarization) (0) | 2024.07.21 |
---|---|
windows 설치파일 digitcert로 전자서명 하기 (0) | 2024.07.17 |
electron s3 github actions 자동 배포 및 autoUpdater 설정 (0) | 2024.05.07 |
electron 디컴파일 해보기, 방지하기 (2) | 2024.04.29 |
electron+react-boilerplate 개발환경에서 deeplink 오류 해결 (0) | 2024.04.29 |