개발된 프로그램을 타인에게 배포시 프로그램 서명이 되어 있지 않아 일부 백신에서 악성 프로그램으로 인식이 되는 문제가 발생하기도 한다.
다음의 절차로 위의 문제를 해결하고자 한다.
- 서명관련 프로그램 다운로드
- 디지털 인증서 (PVK, CER) 생성
- 디지털 인증서 등록 (SPC)
- 개인정보교환 파일 (PFX) 생성
- 배치파일로 자동 서명
1. 서명관련 프로그램 다운로드
서명관련한 프로그램 파일은 윈도우 SDK 다운로드페이지에서 내려 받아 설치하거나 윈도우 10 이상의 OS일 경우, C:\Program Files (x86)\Windows Kits\10\bin\10.0.XXXXX 폴더에서 서명에 관련된 프로그램을 찾을 수 있고, 아래 첨부 파일을 내려받아 압축해제 하여 사용해도 무방하다.
2. 디지털 인증서 (PVK, CER) 생성
형식 : makecert -n “CN=[표시하고자 하는 개인 또는 단체명]” -r -sv [디지털인증서파일명].pvk [디지털인증서파일명].cer
makecert -n "CN=테스트" -r -sv ca.pvk ca.cer
위의 명령어 이후,
창이 나오면서 비밀번호를 입력하도록 되어 있는데, 여기에 입력한 비밀번호는 앞으로의 절차에 반복적으로 나오니, 기억해 둘 것
3. 디지털 인증서 등록 (SPC)
위의 절차를 성공적으로 수행하였다면, 폴더 내에 *.cer 파일과 *.pvk 파일이 생성이 되어 있을 것이다. 다음으로 *.cer 파일로 *.spc 파일을 생성하는데 형식은 다음과 같다.
형식 : cert2spc.exe [디지털인증서파일명].cer [디지털인증서파일명].spc
cert2spc ca.cer ca.spc
cert2spc 실행 프로그램을 통하여, *.spc 파일이 생성된다.
다음은 인증서를 등록하는 과정인데, 다음과 같은 형식으로 입력한다.
형식 : certmgr.exe -add [디지털인증서파일명].cer -s -r localMachine root
certmgr.exe -add ca.cer -s -r localMachine root
등록 여부를 확인하려면 Edge나 익스플로러에서 인터넷옵션->내용->인증서->신뢰할 수 있는 루트 인증기관에 보면, 방금 등록한 [표시하고자 하는 개인 또는 단체명] 이 표시되며, 만약 표시되지 않는다면 가져오기 버튼을 통하여 수동으로 경로를 지정하여 파일 선택해서 가져오면 된다.
4. 개인정보교환 파일 (PFX) 생성
개인정보교환파일을 생성하기 위해 pvk2pfx 프로그램을 사용하는데, 형식은 다음과 같다.
형식 : pvk2pfx -pvk [디지털인증서파일명].pvk -pi [디지털인증서파일의 비밀번호] -spc [디지털인증서파일명].spc -pfx [개인정보교환파일].pfx -po [개인정보교환파일의 비밀번호]
pvk2pfx -pvk ca.pvk -pi **** -spc ca.spc -pfx ca.pfx -po ****
이후 *.pfx 파일이 생성되었다면 성공이다.
5. 배치파일로 자동 서명
실행 파일에 서명하고자 할 때, 다음의 형식의 명령어를 사용한다.
형식 : signtool sign /f [개인정보교환파일].pfx /p [비밀번호] /t http://timestamp.digicert.com /v [서명하고자하는 실행파일]
으로 명령어로 서명하거나 signtool signwizard를 통해 디지털 서명 마법사에 나온 절차대로 서명하면 된다.
아래 배치 파일은 서명하고자 하는 실행파일의 경로만 입력받으면 서명하도록 하는 배치 파일이다. 각자 환경에 맞게 커스텀해서 쓸것.
@echo off
setlocal
REM PFX 파일 경로와 비밀번호 설정
set PFX_FILE=ca.pfx
set PFX_PASSWORD=****
set TIMESTAMP_SERVER=http://timestamp.digicert.com
REM 사용자로부터 서명할 파일 이름 입력받기
set /p FILE_NAME="서명할 파일 이름을 입력하세요: "
REM 서명 명령어 실행
signtool sign /f %PFX_FILE% /p %PFX_PASSWORD% /tr %TIMESTAMP_SERVER% /td sha256 /fd sha256 /v %FILE_NAME%
REM 서명 확인
echo.
echo 서명이 완료되었습니다. 서명을 확인합니다.
signtool verify /pa /v %FILE_NAME%
echo.
echo 서명 과정이 완료되었습니다.
pause
endlocal
** 주의 : 경로명에 한글이 들어가 있을 경우, signtool에서 인식을 못하는 상황이 발생 할 수 있음
처리 결과
.