[2024-02-01] Pyinstaller 윈도우 디펜더 문제 해결
서론
최근 개인적인 프로그램을 만들면서 발생한 문제가 있었다.
그건 바로 Pyinstaller로 생성한 exe파일이 다른 컴퓨터에서는 바이러스 취급되어 칼같이 삭제된다는 것.
그래서 임시방편으로 실시간 감시를 끄고 실행하긴 하지만, 매번 이렇게 실행할 수도 없고, 무엇보다 배포 파일이 이런 식이면 상당히 곤란하다.
그래서 여러 방법을 시도했고, 다음과 같은 방법으로 이 문제를 해결했다.
해결 과정
1. 디지털 서명 키 생성
찾아보니, 이 문제가 발생하는 이유는 디지털 서명이 없기 때문이란다. 그개 뭐냐 하면, 대충 신뢰할 수 있는 곳에서 만든 프로그램입니다~ 하는 일종의 인증서 같은 개념이다.(내가 이해한 것이 맞다면)
그러면 인증서를 만들면 되지 않나 한데, 정식으로 만들려면 개인은 거의 불가능하다고 한다. 무엇보다 돈을 써야한다고 하는데, 개인적인 파일 배포에 돈을 쓰는 건 조금 그렇다. 그렇다면 개인은 시도조차 할 수 없는 거냐 하면, 그건 아니다.
마이크로소프트에서 제공하는 사설 인증 툴을 사용하면 가능하다.
자세한 사항은 다음과 같다.
https://learn.microsoft.com/ko-kr/windows-hardware/drivers/devtest/makecert
해당 링크를 들어가면, 사설 인증서를 만들 수 있는 방법을 알려주고 있다. 지원이 종료되어서 다른 거 사용하라고 하기는 하는데, 쓰려면 쓸 수 있다.
그러기 위해선 Makecert 프로그램을 설치해야 하는데, 사실 어지간하면 이미 설치되어 있을 것이다.
C:\Program Files (x86)\Windows Kits\10\bin\ 폴더에서 10.0. 으로 시작하는 폴더가 여럿 있을 것인데, 여기서 Makecert를 검색하면 나올 것이다.
그러면 cmd창으로 해당 경로로 이동해서 다음과 같은 명령어를 입력하면 사설 인증서를 만들 수 있다.
makecert -n “CN=기관이름” -r -sv ca.pvk ca.cer
기관이름은 아무거나 해도 되는 듯하다.
그러면 파일 2개가 생성되는데, pvk는 보관용, cer는 배포용이다.
배포용을 실행하면 컴퓨터에 인증서를 설치할 수 있다.
2. 디지털 서명 방법
이제 디지털 서명이 생성되었으니 이걸 프로그램에 넣어주면 된다.
그러려면 singtool이 필요한데, 보통은 아까 Makecert가 있던 경로에 있을 것이다.
없다면 다음과 같은 과정으로 설치할 수 있다.
- http://go.microsoft.com/fwlink/p/?LinkID=2022797 에서 iso파일 다운로드
- iso파일을 압축 해제한 후, Installers/Windows SDK Signing Tools-x86_en-us.msi 파일 실행
- C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64 에 설치된 걸 확인
참고한 글 : https://stackoverflow.com/questions/31869552/how-to-install-signtool-exe-for-windows-10/52963704#52963704
이렇게 설치했으면, 다음 명령어를 입력하여 서명할 수 있다.
signtool sign /a /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 type_your_path/file.exe
당연하지만 cmd를 signtool이 있는 경로에서 실행해야 한다.
이러면 서명이 완료된다.
주의사항
이건 어디까지나 테스트 용으로 만들어 보라는 뜻에서 제작한 툴이지, 실제 정식 프로그램에 적용하는 것이 아니다. 그건 돈 내야 한다. 그러니까 “내가 만든 프로그램 좀 써봐” 정도의 의미를 가진 프로그램에 적용하는 것이지, 다른 곳에 사용하면 곤란하다.
그래도 임시방편용으로 사용하기에는 적당하다. 이러면 적어도 내 노트북에서 생성한 exe파일을 데스크톱에서 실행하지 못하는 불상사는 피할 수 있다.
아무튼, 이런 식으로 pyinstaller로 생성한 exe파일에 디지털 서명을 넣었고, 다른 컴퓨터에서 방화벽 해제 없이 정상 작동함을 확인할 수 있었다.
어째서인지 내가 하는 것들은 죄다 환경 문제가 발생한다. 왜 나는 행복할 수가 없는거야.
추가
이와 같이 했는데도 문제가 발생했다… 다음 해결 과정은 아래 버튼에 달아놨다.