엑셀 매크로 서명했는데도 차단될 때 해결법: 디지털 서명·신뢰 설정·MOTW 완벽 가이드

이 글의 목적은 VBA 프로젝트에 인증서로 서명했음에도 엑셀이 여전히 매크로를 차단하는 상황을 체계적으로 진단하고 해결하는 실무 절차를 제공하는 것이다.

문제의 본질: “서명=허용”이 아니다

많은 사용자가 VBA에 디지털 서명을 적용하면 자동으로 실행이 허용될 것이라 기대한다. 그러나 엑셀의 보안 모델은 다층 방어 구조이므로 다음 조건을 모두 충족해야 한다.

  • 파일이 인터넷 출처로 표시되지 않을 것(Mark of the Web, MOTW 제거 또는 신뢰할 위치에서 열기)이다.
  • 서명 인증서가 “신뢰할 수 있는 게시자(Trusted Publishers)”로 신뢰될 것이다.
  • 인증서 체인이 신뢰되는 루트까지 유효하고 용도(EKU)가 “코드 서명(Code Signing)”에 적합할 것이다.
  • 조직 정책(그룹 정책, MDM, ASR 규칙 등)이 매크로 실행을 차단하지 않을 것이다.
  • 서명이 손상되지 않았고 VBA 프로젝트 변경 후 재서명이 되었을 것이다.

증상별 원인과 해결 요약

증상주요 원인해결
“보안 위험. 인터넷에서 가져온 파일의 매크로가 차단됨” 메시지 파일에 MOTW(Zone.Identifier: ZoneId=3) 부착 파일 속성의 차단 해제 체크 또는 Unblock-File 실행, 신뢰할 위치로 이동
“이 게시자는 신뢰되지 않음” 경고 인증서가 Trusted Publishers 스토어에 없음 인증서 공개키를 사용자/로컬 컴퓨터의 Trusted Publishers에 가져오기
서명했는데도 “매크로가 사용 중지됨” Trust Center에서 “디지털 서명된 매크로만 허용” 미구성 또는 정책 차단 Trust Center 설정 점검 또는 그룹 정책 수정, 기업 표준 구성 적용
일부 PC에서만 차단 루트·중간 인증서 체인 불완전, 시간 동기화 문제 루트/중간 인증서 배포, 체인 유효성 점검
인증서 유효기간 만료 후 갑자기 차단 VBA 서명은 일반적으로 타임스탬프 미지원 → 만료 시 신뢰 상실 새 인증서로 재서명, 문서 재배포
.ZIP에서 꺼내면 또 차단 압축 해제 시 MOTW 전파 압축 해제 후 차단 해제 또는 안전한 전송 채널 사용
네트워크 공유에서 열 때만 차단 네트워크 경로는 기본적으로 신뢰할 위치 아님 정책으로 네트워크 신뢰 위치 허용 후 공유 폴더를 신뢰 위치로 등록

1. 1차 진단: 파일의 출처(MOTW) 확인

인터넷에서 다운로드했거나 이메일 첨부·클라우드 동기화로 유입된 파일은 Windows가 부착한 대체 데이터 스트림(ADS) Zone.Identifier 때문에 Office가 매크로를 원천 차단한다.

REM 파일의 MOTW 확인 notepad "C:\작업\Report.xlsm:Zone.Identifier"
REM PowerShell에서 일괄 차단 해제
Get-ChildItem C:\작업*.xlsm -Recurse | Unblock-File

GUI에서는 파일 속성 창에서 “차단 해제” 체크 후 확인한다. OneDrive/SharePoint 동기화 파일도 MOTW가 유지되는 경우가 많으므로 동일 절차가 필요하다.

주의 : “인터넷에서 가져온 파일의 매크로 차단” 정책은 서명 여부와 무관하게 차단을 우선 적용한다. 먼저 MOTW를 제거하거나 신뢰할 위치에서 열어야 한다.

2. 신뢰할 위치(Trusted Locations) 전략

반복 사용 문서라면 신뢰할 위치에 배치하는 것이 운영상 가장 안정적이다.

  1. 엑셀 > 옵션 > 보안 센터 > 보안 센터 설정 > 신뢰할 위치.
  2. “새 위치 추가” 후 경로 지정, 필요 시 “이 위치의 하위 폴더도 신뢰” 체크한다.
  3. 네트워크 경로를 사용할 경우 정책에서 “네트워크의 신뢰할 위치 허용”을 활성화한다.
주의 : 신뢰할 위치는 관리적 통제로 운영해야 한다. 모든 사용자의 로컬 전체 드라이브를 신뢰 위치로 지정하는 설정은 보안상 위험하다.

3. 인증서 신뢰 체계: Trusted Publishers와 루트 체인

VBA 서명은 “파일 서명”이 아니라 “VBA 프로젝트 서명”이다. Office는 다음 조건을 검사한다.

  • 인증서의 용도(EKU)에 코드 서명(OID 1.3.6.1.5.5.7.3.3)이 포함되어야 한다.
  • 인증서 체인이 신뢰되는 루트까지 이어져야 한다.
  • 인증서 발행자가 기업 내부 CA이든 공인 CA이든 게시자 인증서가 Trusted Publishers 스토어에 존재해야 한다.

확인은 다음과 같이 한다.

:: 사용자 개인 스토어의 코드서명 인증서 목록 certutil -store -user My
:: 게시자 신뢰 스토어 확인
certutil -store -user TrustedPublisher

:: 인증서 상세 보기(MMC)
certmgr.msc

자체 서명(SelfCert.exe) 인증서도 사용 가능하나, 배포 전 해당 공개키를 사용자/컴퓨터의 Trusted Publishers에 배포해야 경고 없이 실행된다.

4. Trust Center 정책 구성

개별 PC에서 설정할 수 있으나 기업 환경에서는 그룹 정책 또는 MDM으로 관리한다.

  • 엑셀 > 옵션 > 보안 센터 > 보안 센터 설정 > 매크로 설정:
옵션의미권장
모든 매크로 사용 안 함전면 차단고보안 구간
알림 표시 후 사용 안 함사용자 선택 허용개발·일반
디지털 서명된 매크로만 허용신뢰된 게시자 서명만 실행기업 권장
모든 매크로 사용비권장테스트 한정

정책 키 예시(Office 2016~Microsoft 365):

REM 사용자 범위(예시: Excel 2016/365는 16.0) reg add HKCU\Software\Microsoft\Office\16.0\Excel\Security /v VBAWarnings /t REG_DWORD /d 3 /f REM 1: 모든 매크로 사용 안 함 REM 2: 알림 표시 후 사용 안 함 REM 3: 디지털 서명된 매크로만 허용 REM 4: 모든 매크로 사용 

인터넷 파일 차단 정책 키:

reg add HKCU\Software\Microsoft\Office\16.0\Excel\Security /v BlockMacrosFromInternet /t REG_DWORD /d 1 /f 
주의 : 위 정책이 1이면 인터넷 출처 파일은 서명 여부와 상관없이 차단한다. 배포 프로세스에서 MOTW 제거 또는 신뢰 위치 사용이 필수이다.

5. 서명이 무효가 되는 흔한 기술 원인

  • 프로젝트 변경 후 미재서명이다. VBE에서 코드 한 줄이라도 수정하면 서명이 제거된다. 배포 전 항상 최종 빌드에 재서명한다.
  • 인증서 만료이다. VBE 기반 VBA 서명은 일반적으로 타임스탬프를 사용하지 않으므로 만료 시 신뢰가 상실된다. 만료 전 갱신·재서명 계획을 세운다.
  • 잘못된 EKU이다. 문서 서명용이나 클라이언트 인증서로는 신뢰되지 않는다. Code Signing EKU를 확인한다.
  • 체인 불완전이다. 중간 인증서 부재 시 일부 PC에서만 실패한다. 루트·중간 인증서를 GPO로 배포한다.

6. 실제 운영 절차: 개발·테스트·배포 체크리스트

6.1 개발 환경

  1. 기업 CA 또는 공인 CA에서 코드 서명 인증서를 발급받는다(개인 키는 안전한 보관 장치에 저장)이다.
  2. VBE > 도구 > 디지털 서명 > 선택 > 인증서 지정 후 저장한다.
  3. 전처리: 파일 속성 > 고급 > “내용에 인덱싱 허용”은 서명과 무관하나, 압축·배포 과정에서 MOTW가 붙지 않게 신뢰된 경로를 사용한다.

6.2 테스트 환경

  1. 테스트 PC의 Trusted Root Certification Authorities, Intermediate Certification Authorities, Trusted Publishers에 필요한 인증서를 배포한다.
  2. Trust Center에서 “디지털 서명된 매크로만 허용”으로 설정한다.
  3. 테스트 샘플을 로컬 신뢰 위치에서 열고 정상 동작을 확인한다.
  4. 압축·전송·다운로드 시나리오별로 MOTW 전파 여부를 검증한다.

6.3 배포 환경

  1. 문서를 신뢰할 위치에 배치하거나, 1회성 배포는 사용자에게 “속성 > 차단 해제” 절차를 명확히 안내한다.
  2. 인증서 공개키를 모든 사용자 환경의 Trusted Publishers에 GPO/MDM으로 배포한다.
  3. 네트워크 공유를 사용할 경우 “네트워크의 신뢰할 위치 허용” 정책을 활성화한다.

7. 기업 정책 충돌 점검

  • 공격 표면 감소(ASR) 규칙 중 일부는 매크로 실행 후 동작을 제한한다. 예: “Office 애플리케이션이 자식 프로세스 생성 차단”. 매크로 자체가 차단된 것으로 오인할 수 있다. 정책 이벤트 로그를 확인한다.
  • 보호 보기(Protected View)에서 편집 허용 이전에는 매크로가 비활성화된다. 신뢰할 위치 또는 파일 차단 해제가 필요하다.
  • 신뢰할 문서(Trusted Documents) 기능이 조직 정책으로 비활성화되면 매 열람 시 경고가 반복된다. 배포·신뢰 위치 전략으로 해결한다.

8. 자주 쓰는 진단 명령 모음

:: 특정 파일의 ADS 존재 여부 powershell -NoProfile -Command "Get-Item -Path 'C:\Docs\Report.xlsm' -Stream *"
:: MOTW 제거
powershell -NoProfile -Command "Unblock-File -Path 'C:\Docs\Report.xlsm'"

:: 인증서 체인 요약
certutil -verify "C:\Temp\publisher.cer"

:: 사용자 Trusted Publishers 내보내기
certutil -store -user TrustedPublisher > tp_list.txt

9. VBE 서명과 Authenticode의 차이 이해

많이 혼동하는 부분이다. SignTool로 .xlsm 파일 자체를 서명해도 Office가 VBA 신뢰 판단에 사용하지 않는다. VBE의 “디지털 서명”은 VBA 프로젝트 스트림에 대한 서명으로 별도 처리된다. 따라서 빌드·패키징 자동화 시 “VBE 서명 단계”가 반드시 포함되어야 한다.

10. 네이밍·버전 관리 팁

  • VBA 프로젝트 재서명 자동화를 위해 VBE7.DLL 인터페이스 또는 배치 스크립트를 활용해 “최종 저장 > 서명 > 읽기 전용 배포” 순서를 고정한다.
  • 파일명에 빌드 시각을 포함하면 사용자 측 캐시 혼선을 줄인다.
  • 문서 내부에 ThisWorkbook 오픈 시 검증 로깅(예: 서명 주체, 인증서 만료일)을 Immediate Window나 숨김 시트에 기록해 현장 진단 시간을 단축한다.

11. 사례 기반 해결 시나리오

사례 A: 공인 인증서로 서명했는데도 인터넷 경고로 차단

  1. 다운로드한 폴더에서 바로 열었다. 파일 속성 > 차단 해제 체크 후 재열기한다.
  2. 반복 배포이므로 사용자 PC에 다운로드 폴더를 신뢰 위치로 지정하지 말고, 전용 신뢰 위치 폴더를 만든 뒤 그곳에 배포한다.

사례 B: 자체 서명 인증서(SelfCert) 사용

  1. 개발 PC에서 서명 후 .cer 공개키를 내보낸다.
  2. 사용자 PC의 Trusted Publishers에 가져온다.
  3. 정책이 “디지털 서명된 매크로만 허용”일 때 정상 실행된다.

사례 C: 인증서 만료 후 일괄 차단

  1. 새 코드서명 인증서 발급 및 체인 배포한다.
  2. 원본 .xlsm/.xlam을 열어 재서명 후 재배포한다.
  3. 버전 혼재 방지를 위해 구버전 폐기 절차를 병행한다.

12. 배포 체크리스트(현장용)

항목합격 기준확인 방법
파일 출처MOTW 없음속성의 차단 해제 또는 Unblock-File
신뢰 위치전용 폴더 지정보안 센터 > 신뢰할 위치
인증서 EKUCode Signing 포함certutil -store My
체인루트까지 신뢰certmgr.msc로 루트/중간 확인
게시자 신뢰Trusted Publishers 등록certutil -store TrustedPublisher
정책서명된 매크로 허용보안 센터 또는 GPO 점검
만료유효기간 내인증서 만료일 확인
최종 서명배포 빌드에 서명 유지VBE > 디지털 서명 확인

13. 스크립트 템플릿: 사용자 PC 준비 자동화

@echo off REM 1) Trusted Publishers에 게시자 인증서 배포(관리자 권한 권장) certutil -addstore -user TrustedPublisher "\\share\certs\publisher.cer"
REM 2) Excel 정책: 디지털 서명된 매크로만 허용
reg add HKCU\Software\Microsoft\Office\16.0\Excel\Security /v VBAWarnings /t REG_DWORD /d 3 /f

REM 3) 네트워크 신뢰 위치 허용(필요 시)
reg add HKCU\Software\Microsoft\Office\16.0\Excel\Security /v AllowNetworkLocations /t REG_DWORD /d 1 /f

echo Done.

14. 개발자가 자주 하는 실수와 예방

  • 빌드 파이프라인에서 “서명 후 소소한 서식 수정”으로 서명 무효화한다. 서명 이후에는 바이트 변경 금지한다.
  • 전자메일, 메신저, 클라우드 링크를 섞어 배포해 사용자 파일마다 출처 플래그가 달라진다. 단일 채널·신뢰 위치로 일원화한다.
  • 인증서 개인 키를 여러 PC에 복사해 관리한다. HSM/스마트카드 등 안전 매체를 사용한다.

15. 빠른 복구 절차(현장 대응 5단계)

  1. 파일 속성 > 차단 해제 체크한다.
  2. 임시로 로컬 신뢰할 위치 폴더로 이동해 테스트한다.
  3. VBE에서 디지털 서명이 살아있는지 확인한다. 변경됐다면 재서명한다.
  4. Trusted Publishers에 게시자 인증서가 있는지 확인하고 없으면 가져온다.
  5. 정책이 “디지털 서명된 매크로만 허용” 이상으로 엄격한지 확인하고 필요 시 완화한다.

FAQ

공인 EV 코드 서명 인증서를 쓰면 VBA도 자동 신뢰되는가?

그렇지 않다. VBA 프로젝트 신뢰는 VBE 서명과 게시자 신뢰에 의해 결정된다. EV 여부는 일반 실행 파일 신뢰에 유리할 뿐 VBA 신뢰를 보장하지 않는다.

SignTool.exe로 .xlsm 파일을 서명하면 충분한가?

아니다. 이는 파일 외부 서명이며 바람직한 배포 표식일 수는 있으나, 엑셀은 VBA 신뢰 판단에 사용하지 않는다. VBE에서 별도로 VBA 프로젝트 서명이 필요하다.

인증서가 만료되었는데 계속 실행되게 하려면?

VBA 서명은 일반적으로 타임스탬프를 사용하지 않으므로 만료 시 신뢰가 사라진다. 새 인증서로 재서명 후 배포해야 한다.

네트워크 공유에서만 경고가 계속 뜬다.

기본적으로 네트워크 경로는 신뢰 위치가 아니다. 정책에서 네트워크 신뢰 위치 허용을 활성화하고 해당 공유를 신뢰 위치로 등록한다.

자체 서명 인증서를 써도 되는가?

가능하다. 다만 사용자 환경에 해당 인증서의 공개키를 Trusted Publishers로 배포해야 경고가 사라진다. 보안·감사 요구 사항에 따라 기업 CA 발급을 권장한다.

ZIP로 배포하면 왜 다시 차단되는가?

최근 Windows는 MOTW를 압축 내부 항목으로 전파한다. 압축 해제 후 각 파일에 대해 차단 해제를 수행하거나 신뢰된 경로로 전송한다.

매크로가 실행되지만 외부 프로세스 호출이 실패한다.

이는 ASR 규칙 또는 EDR 정책의 차단일 가능성이 높다. 매크로 신뢰 문제와 별개이므로 보안 로그를 확인하고 예외 정책을 협의한다.