Visual Studio를 이용한 CodeSign 서명 가이드

본 가이드는 Visual Studio에서 프로젝트를 불러온 후 진행되는 서명 과정입니다.
프로젝트 속성을 이용한 서명빌드 이벤트를 이용한 서명 두 가지 방법을 안내합니다.

인증서 정상 등록 여부 확인

SafeNet 프로그램을 클릭하여 USB(SafeNet eToken)에 아래와 같이 인증서가 추가되어 있는지 확인합니다.

▶ 사용자 인증서 > 발급 대상의 인증서 더블클릭하여 인증서 만료일자 확인

SafeNet Authentication Client 인증서 확인

⚠️ 서명 전 준비사항

• Visual Studio가 설치되어 있어야 합니다.
• USB 토큰을 PC에 연결해주세요.
• SafeNet Authentication Client가 설치되어 있어야 합니다.
• Windows SDK가 설치되어 있어야 합니다. (signtool.exe 필요)
• CodeSign 인증서가 USB 토큰에 발급되어 있어야 합니다.

방법 1: 프로젝트 속성을 이용한 서명

Visual Studio 프로젝트 속성에서 ClickOnce 매니페스트 서명을 설정하는 방법입니다.

1단계: 프로젝트 속성 열기

불러온 프로젝트를 우클릭하여 "속성"을 클릭합니다.

▶ 속성 메뉴 열기:
• 솔루션 탐색기에서 프로젝트 선택
• 마우스 우클릭
• 컨텍스트 메뉴에서 "속성" 클릭

프로젝트 속성 열기

2단계: ClickOnce 매니페스트 서명 활성화

"ClickOnce 매니페스트 서명"을 활성화한 후, "저장소에서 선택"을 클릭합니다.

▶ 서명 설정 방법:
• 프로젝트 속성 창에서 "서명" 탭 선택
• "ClickOnce 매니페스트 서명" 체크박스 활성화
"저장소에서 선택" 버튼 클릭

ClickOnce 매니페스트 서명

3단계: USB 내 인증서 선택

USB의 인증서를 확인한 후 "확인"을 클릭합니다.

▶ 인증서 선택:
• "인증서 선택" 창이 표시됩니다
• USB 토큰에 설치된 CodeSign 인증서 확인
• 발급 대상 및 발급자 정보 확인
"확인" 버튼 클릭

인증서 선택

4단계: 타임스탬프 서버 URL 설정

불러온 인증서를 확인하고, 타임스탬프 서버 URL을 기입합니다.

▶ 타임스탬프 서버 URL:

- GlobalSign : http://timestamp.globalsign.com/tsa/r6advanced1
- Digicert : http://timestamp.digicert.com
- Sectigo : http://timestamp.comodoca.com/rfc3161

타임스탬프 서버 URL 설정

5단계: 프로젝트 빌드

프로젝트를 다시 빌드합니다.

▶ 빌드 방법:
• 상단 메뉴에서 "빌드" → "솔루션 빌드" 선택
• 또는 프로젝트 우클릭 → "빌드" 선택
• 단축키: Ctrl + Shift + B

프로젝트 빌드

6단계: USB 패스워드 입력

빌드 진행 중 SafeNet 프로그램 팝업이 표시되면, USB 토큰 패스워드를 입력해 주세요.

⚠️ USB 패스워드 입력

• SafeNet Authentication Client 팝업창이 자동으로 표시됩니다
USB 패스워드를 입력합니다
• "OK" 버튼을 클릭하여 서명을 진행합니다

eToken 패스워드 입력

7단계: 빌드 및 서명 결과 확인

빌드 및 서명 결과를 확인합니다.

빌드 결과 확인

✓ 빌드 성공 확인

• 출력 창에서 "빌드: 성공 1개" 메시지 확인
• 빌드된 파일(exe)이 정상적으로 생성되었는지 확인
• 파일 속성에서 디지털 서명 탭 확인

8단계: 서명된 파일 정상 서명 확인

빌드에 성공했다면, 빌드된 파일이 정상적으로 서명되었는지 확인합니다.

▶ 서명 확인 방법:
• 빌드된 exe 파일을 마우스 우클릭
• "속성" 선택
"디지털 서명" 탭 확인
• 서명 목록에 인증서 정보가 표시되면 정상

서명 확인

방법 2: 빌드 이벤트를 이용한 서명

해당 설정으로 빌드 결과물(exe파일)에 서명이 제대로 진행되지 않는 경우,
"빌드 이벤트"를 이용하여 서명하실 수 있습니다.

1단계: 빌드 이벤트 클릭

빌드 이벤트 클릭합니다.

signtool 확인

2단계: Signtool 설치 확인

Signtool.exe 파일이 설치되었는지 확인합니다.

▶ signtool 확인 방법:
• 명령 프롬프트(cmd) 또는 PowerShell 실행
• 아래 경로에 signtool.exe가 있는지 확인:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.28000.0\x64\signtool.exe

※ 설치가 되어 있지 않다면:
Windows SDK 설치 가이드에서 SDK를 설치합니다.

signtool 확인

3단계: 인증서 정보 확인 (SafeNet)

SafeNet을 통해 eToken에 설치된 인증서 정보(발급 대상, 지문 값)를 확인합니다.

▶ 인증서 정보 확인 방법:
• SafeNet Authentication Client Tools 실행
• "내 토큰" → "사용자 인증서" 선택
• 인증서를 더블클릭하여 상세 정보 확인
"발급 대상""지문" 값 복사

※ SafeNet이 설치되어 있지 않다면:
SafeNet 설치 가이드에서 SafeNet을 설치합니다.

인증서 정보 확인

인증서 정보 확인 인증서 정보 확인

4단계: signtool 명령어 작성 및 서명 테스트

확인한 인증서 정보를 통해 signtool 명령어를 작성하고 서명을 테스트합니다.

▶ signtool 명령어 형식:

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.28000.0\x64\signtool.exe" sign /a /v /s MY /n [발급 대상] /as /fd sha256 /tr http://timestamp.globalsign.com/tsa/r6advanced1 /sha1 [지문값] /td SHA256 [서명할 빌드 결과 파일(exe)]

※ 명령어 설명:
/n [발급 대상]: 인증서의 발급 대상 (업체명)
/sha1 [지문값]: 인증서의 지문(Thumbprint) 값 (공백 없이)
[서명할 파일]: 빌드 결과물의 전체 경로

명령어 테스트

명령어 테스트

✓ 서명 성공 확인

"Number of files successfully Signed: 1" 메시지가 표시된 경우,
서명이 정상적으로 완료된 상태입니다.

5단계: 서명된 파일 확인

서명된 파일을 확인합니다.

▶ 서명 확인 방법:
• 서명된 exe 파일을 마우스 우클릭
• "속성" → "디지털 서명" 탭 확인
• 서명 정보 및 타임스탬프 확인

서명 확인

6단계: 빌드 후 이벤트 명령줄에 추가

서명에 사용했던 명령어를 복사하여 "빌드 후 이벤트 명령줄"에 추가합니다.

▶ 빌드 후 이벤트 설정:
• 프로젝트 우클릭 → "속성"
• "빌드 이벤트" 탭 선택
"빌드 후 이벤트 명령줄"에 signtool 명령어 입력
• 명령어에서 [서명할 파일] 부분을 $(TargetPath)로 변경
• "확인" 또는 "저장" 클릭

💡 팁: $(TargetPath) 매크로 사용

$(TargetPath)는 빌드된 결과 파일의 전체 경로를 자동으로 가져옵니다
• 예: C:\Projects\MyApp\bin\Debug\MyApp.exe
• 매번 경로를 수정할 필요가 없어 편리합니다

빌드 후 이벤트 설정

프로젝트 빌드

7단계: 프로젝트 다시 빌드

프로젝트를 다시 빌드 합니다.

eToken 패스워드 입력

8단계: USB 토큰 패스워드 입력

USB 토큰 패스워드를 입력합니다.

서명 완료 확인

9단계: USB 토큰 패스워드 입력

서명이 완료되면 빌드 및 서명 결과물을 확인합니다.

서명 완료 확인

✓ 서명 완료

• 출력 창에서 "Number of files successfully Signed: 1" 메시지 확인
• 빌드된 exe 파일의 디지털 서명 확인
• 이제부터 빌드할 때마다 자동으로 서명이 적용됩니다

10단계: 서명된 파일 확인

서명된 파일을 확인합니다.

▶ 서명 확인 방법:
• 서명된 exe 파일을 마우스 우클릭
• "속성" → "디지털 서명" 탭 확인
• 서명 정보 및 타임스탬프 확인

서명 확인

🎉 Visual Studio 서명 설정이 완료되었습니다