Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀 VBA 디지털 서명(Sign) 관련 오류를 체계적으로 진단하고 해결하는 방법을 현업 기준으로 정리하여, 매크로 서명·배포·검증을 안전하고 재현성 있게 수행하도록 돕는 것이다.
VBA 디지털 서명은 VBA 프로젝트(.xlsm, .xlam, .xls, .xla 등)의 코드에 인증서 기반 서명 값을 삽입하여, 코드 작성자 신원과 코드 무결성을 검증하는 메커니즘이다.
| 오류 메시지/증상 | 주요 원인 | 핵심 해결책 |
|---|---|---|
| “매크로에 대한 유효한 서명이 없습니다” | 코드 수정 후 재서명 미실시, 인증서 만료, 해시 알고리즘 비호환 | 코드 변경 후 즉시 재서명, 유효한 인증서 사용, SHA-256 서명 재시도 |
| “서명이 손상되었습니다” 또는 무효 표시 | VBA 프로젝트 일부가 변경됨, 내장 모듈 메타데이터 불일치 | 최근 변경 취소 또는 재서명, 서명 전 VBA 프로젝트 정리/압축 |
| “인증서를 신뢰할 수 없습니다” | 자체 서명(Self-signed) 인증서 미신뢰, 체인 불완전 | 신뢰할 수 있는 발급자 인증서 사용, 신뢰할 수 있는 게시자에 추가 |
| “인증서가 만료되었습니다” | 유효기간 경과, 타임스탬프 미포함 | 새 인증서로 재서명, 타임스탬프 포함 옵션 사용 |
| “서명할 수 없습니다” (VBE에서 서명 실패) | 개인키 없음, 인증서 권한 미일치, CSP/키 길이 문제 | 개인키 포함 인증서 설치, 서명용(Key Usage: Code Signing) 인증서 재발급 |
| “이 게시자는 차단됨” | 신뢰 센터의 게시자 차단 목록에 등록 | 신뢰 센터에서 게시자 제거 또는 신뢰 게시자에 다시 추가 |
| “서명되었으나 실행 차단” | 조직 정책이 내부 루트만 허용, EV 요구 | 조직 루트 체인으로 재서명, 정책에 맞춘 인증서 사용 |
| 종류 | 특징 | 장점 | 적합한 용도 |
|---|---|---|---|
| SelfCert(자체 서명) | 로컬에서 SelfCert.exe로 생성, 체인 없음 | 즉시 발급, 비용 없음 | 개발·테스트, 개인 사용 |
| 조직 내부CA | 사내 PKI 발급, 도메인 신뢰 배포 | 관리 용이, 중앙 통제 | 사내 배포, 부서 자동 신뢰 |
| 공인 Code Signing | 공인 CA 발급, 체인 완전 | 외부 신뢰성, 배포 범용 | 대외 배포 애드인·템플릿 |
| EV Code Signing | 하드토큰/HSM 기반, 강화 검증 | 높은 신뢰, 정책 호환 우수 | 규모 있는 배포·규제 환경 |
타임스탬프는 “서명 당시 인증서가 유효했다”는 시점을 증명한다. 인증서 만료 후에도 서명은 유효로 해석될 수 있다. 타임스탬프가 빠지면 인증서 만료 시 서명도 사실상 신뢰되지 않는다.
| # | 점검 항목 | 합격 기준 |
|---|---|---|
| 1 | 인증서에 개인키가 포함되어 있는가 | 개인키 있음 표기, 내보내기 불가 표시(보안설정) 확인 |
| 2 | 인증서 용도가 코드 서명인가 | Key Usage/Enhanced Key Usage에 Code Signing(OID 1.3.6.1.5.5.7.3.3) |
| 3 | SHA-256 이상의 서명인가 | 서명 알고리즘이 sha256RSA 이상 |
| 4 | 체인이 완전한가 | 루트/중간 CA 신뢰 스토어에 설치 |
| 5 | 타임스탬프가 있는가 | 서명 정보에 타임스탬프 존재 |
| 6 | 서명 후 코드 변경이 없었나 | 서명 직후 즉시 배포, 이후 변경 금지 |
| 7 | 조직 정책과 합치하는가 | “서명된 매크로만 허용” 환경에서 정상 실행 |
| 8 | 신뢰할 수 있는 게시자에 등록되었나 | 게시자 목록에 표시됨 |
| 9 | CRL/OCSP 접근 가능 여부 | 필요 시 네트워크 허용 또는 내부 서비스 제공 |
| 10 | 배포 경로가 신뢰 위치인가 | 신뢰 위치 또는 서명 강제 정책 충돌 없음 |
다음 예시는 인증서 상태 확인과 배포 자동화 점검에 도움이 되는 명령 예시이다.
:: 인증서 스토어에 코드 서명 인증서 존재 여부 확인(PowerShell) Get-ChildItem Cert:\CurrentUser\My | Where-Object { $_.EnhancedKeyUsageList.FriendlyName -contains "Code Signing" } | Select-Object Subject, NotBefore, NotAfter, HasPrivateKey
:: 개인키 포함 여부 확인
Get-ChildItem Cert:\CurrentUser\My | Where-Object { $_.HasPrivateKey } |
Select-Object Subject, HasPrivateKey
:: 서명 후 파일의 디지털 서명 메타정보 확인(Windows)
certutil -dump "C:\Path\YourAddin.xlam"
:: 신뢰할 수 있는 게시자 목록 확인(관리자용)
certmgr.msc
해결은 다음과 같다.
| 시나리오 | 즉시 조치 | 근본 해결 |
|---|---|---|
| 코드 수정 후 서명 파기 | 재서명 및 재배포 | 서명 전 코드 프리즈, 자동화된 빌드로 재현성 확보 |
| 자체 서명 미신뢰 | 사용자 로컬에 게시자 신뢰 추가 | 내부CA 또는 공인 인증서 전환 |
| 인증서 만료 | 새 인증서로 즉시 재서명 | 타임스탬프 의무화, 만료 모니터링 |
| 체인 검증 실패 | 중간/루트 인증서 설치 | GPO로 체인 자동 배포 |
| 정책 상 서명만 허용 | 서명 검증 통과 확인 | 정책 문서와 빌드 파이프라인 정렬 |
[빌드/배포 체크] 1) 코드 프리즈 완료 2) SHA-256 이상으로 서명 3) 타임스탬프 포함 4) 체인 완전성 검증 5) 신뢰 게시자 등록 안내 동봉 6) 샌드박스에서 신규 사용자 시나리오 테스트 7) 변경 이력·해시·서명자 기록 보관 참조 목록 변경은 VBA 프로젝트 메타데이터를 바꾸므로 서명이 무효화된다. 참조 변경을 포함한 모든 수정 후에는 재서명해야 한다.
신뢰 센터 정책, 인증서 체인, CRL/OCSP 접근성 차이 때문이다. 조직 표준 이미지와 동일한 인증서 체인·정책·네트워크 조건을 맞추면 일관되게 동작한다.
권장하지 않는다. 외부 환경에서는 자체 서명이 기본적으로 신뢰되지 않는다. 공인 코드서명 또는 EV 코드서명을 사용한다.
타임스탬프가 있으면 서명 당시 유효성을 근거로 계속 신뢰될 수 있다. 타임스탬프가 없으면 만료 시 실행이 제한될 가능성이 높다.
충분하지 않다. 서명은 신원과 무결성 확인 수단이다. 별도의 악성 코드 탐지, 원본 보증 절차, 접근 권한 통제가 함께 필요하다.