Cách kiểm tra chữ ký số file EXE bằng SignTool
Cập nhật lần cuối: 19/08/2026
Hướng dẫn kiểm tra và xác minh chữ ký số của file EXE bằng SignTool trên Windows, cách kiểm tra Certificate, Certificate Chain, Timestamp và trạng thái hợp lệ của chữ ký Code Signing.
Kiểm tra chữ ký bằng SignTool là gì?
SignTool cung cấp lệnh verify để kiểm tra chữ ký số của các tệp trên Windows. Với file EXE đã được ký bằng Code Signing Certificate, SignTool có thể xác minh chữ ký, kiểm tra Certificate và đánh giá liệu chữ ký có đáp ứng chính sách xác minh Authenticode hay không.
Kiểm tra chữ ký sau khi ký là bước quan trọng trong quy trình Code Signing. Thay vì chỉ dựa vào thông báo ký thành công, nhà phát triển có thể sử dụng SignTool để xác nhận chữ ký thực sự tồn tại, Certificate có thể được xác minh và file không bị thay đổi sau khi ký.
Quy trình kiểm tra cơ bản gồm:
- Xác định file cần kiểm tra.
- Sử dụng signtool verify để xác minh chữ ký.
- Sử dụng /pa khi kiểm tra chữ ký Authenticode của ứng dụng.
- Sử dụng /v để hiển thị thông tin chi tiết.
- Kiểm tra Certificate và Certificate Chain.
- Kiểm tra Timestamp nếu file đã được Timestamp.
- Kiểm tra mã trả về của SignTool để xác định kết quả.
SignTool verify không chỉ kiểm tra xem file có chứa chữ ký hay không mà còn có thể xác minh Certificate, trạng thái tin cậy và khả năng đáp ứng chính sách xác minh tương ứng.
Xem thêm: SignTool là gì?
Chuẩn bị trước khi kiểm tra chữ ký
Để sử dụng SignTool Verify, cần có SignTool được cài đặt trên Windows và file cần kiểm tra.
1. Kiểm tra SignTool
Mở Command Prompt hoặc PowerShell và chạy:
signtool
Nếu SignTool đã được thêm vào PATH, hệ thống sẽ hiển thị danh sách các lệnh và tùy chọn được hỗ trợ.
Nếu chưa có trong PATH, có thể gọi SignTool bằng đường dẫn đầy đủ:
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
Đường dẫn thực tế có thể khác tùy phiên bản Windows SDK và kiến trúc hệ thống.
2. Chuẩn bị file cần kiểm tra
Ví dụ file cần kiểm tra có đường dẫn:
C:\Release\MyApplication.exe
File có thể được ký bằng Code Signing Certificate được lưu trong PFX, Windows Certificate Store, USB Token, HSM hoặc các dịch vụ Remote/Cloud Signing.
SignTool không yêu cầu phải có Private Key để thực hiện bước verify. Quá trình xác minh sử dụng chữ ký và Certificate được nhúng trong file cùng với các thông tin cần thiết để xây dựng và kiểm tra Certificate Chain.
Kiểm tra chữ ký EXE bằng SignTool Verify
Lệnh cơ bản để kiểm tra chữ ký của một file là:
signtool verify "C:\Release\MyApplication.exe"
Lệnh verify yêu cầu SignTool kiểm tra chữ ký của file được chỉ định.
Tuy nhiên, khi kiểm tra file EXE được ký bằng Code Signing Certificate, nên sử dụng chính sách xác minh Authenticode thông qua /pa.
signtool verify /pa "C:\Release\MyApplication.exe"
Tùy chọn /pa yêu cầu SignTool sử dụng Default Authenticode Verification Policy. Nếu không chỉ định /pa, SignTool có thể sử dụng Windows Driver Verification Policy, không phù hợp với mục đích kiểm tra thông thường đối với ứng dụng Windows.
Hiển thị thông tin chi tiết khi kiểm tra chữ ký
Để xem nhiều thông tin hơn về Certificate và quá trình xác minh, có thể sử dụng tùy chọn /v.
signtool verify /v /pa "C:\Release\MyApplication.exe"
Tùy chọn /v là viết tắt của Verbose và yêu cầu SignTool hiển thị thông tin chi tiết trong quá trình thực hiện.
Kết quả có thể bao gồm thông tin về:
- Trạng thái chữ ký.
- Signer Certificate.
- Certificate Chain.
- Certificate Authority.
- Thông tin Timestamp.
- Kết quả xác minh.
Đây là lệnh phù hợp khi cần kiểm tra chi tiết một file EXE sau khi ký:
signtool verify /v /pa "C:\Release\MyApplication.exe"
Xem thêm: Code Signing là gì?
Kiểm tra nhiều chữ ký trên cùng một file
Một file có thể chứa nhiều chữ ký số. Trường hợp này thường xuất hiện khi phần mềm được ký bổ sung hoặc sử dụng nhiều chữ ký trong quá trình phát hành.
Để kiểm tra tất cả chữ ký trong file, sử dụng tùy chọn /all:
signtool verify /all /pa "C:\Release\MyApplication.exe"
Tùy chọn /all yêu cầu SignTool xác minh tất cả chữ ký có trong file thay vì chỉ kiểm tra một chữ ký.
Có thể kết hợp với /v để xem thông tin chi tiết:
signtool verify /all /v /pa "C:\Release\MyApplication.exe"
Kiểm tra Timestamp của chữ ký
Timestamp là thành phần quan trọng trong Code Signing vì nó ghi nhận thời điểm chữ ký được tạo. Khi kiểm tra file đã ký, có thể muốn xác định xem chữ ký có được Timestamp hay chưa.
SignTool hỗ trợ tùy chọn /tw để tạo cảnh báo nếu chữ ký không có Timestamp:
signtool verify /tw /pa "C:\Release\MyApplication.exe"
Có thể kết hợp /tw với /v:
signtool verify /v /tw /pa "C:\Release\MyApplication.exe"
Tùy chọn này đặc biệt hữu ích trong quy trình Release Automation khi muốn phát hiện những file đã ký nhưng chưa được Timestamp.
Timestamp không thay thế Code Signing Certificate. Timestamp cung cấp bằng chứng về thời điểm chữ ký được tạo và là một thành phần quan trọng trong việc duy trì khả năng xác minh chữ ký sau khi Certificate hết hạn.
Xem thêm: Timestamp là gì?
Kiểm tra Certificate Chain bằng SignTool
Khi xác minh chữ ký, SignTool không chỉ kiểm tra chữ ký được nhúng trong file mà còn có thể kiểm tra Certificate được sử dụng để ký và Certificate Chain.
Một Certificate Chain thông thường có cấu trúc:
Code Signing Certificate
│
▼
Intermediate CA
│
▼
Root CA
│
▼
Trusted Root Store
Nếu Certificate Chain được xây dựng thành công và Root CA được hệ thống tin cậy, Certificate có thể được xác minh theo chính sách tương ứng.
Ngược lại, nếu Certificate đã hết hạn, bị revoke, thiếu Intermediate Certificate hoặc Root CA không được tin cậy, SignTool có thể trả về lỗi khi xác minh.
Kiểm tra chữ ký với Root Certificate cụ thể
SignTool hỗ trợ tùy chọn /r để yêu cầu Certificate ký phải chain đến một Root Certificate có Subject Name được chỉ định.
Ví dụ:
signtool verify /pa /r "Example Root CA" "C:\Release\MyApplication.exe"
Giá trị của /r là Subject Name hoặc một phần Subject Name của Root Certificate mà Certificate ký phải chain tới.
Tùy chọn này hữu ích trong các môi trường có yêu cầu kiểm soát cụ thể về Certificate Authority.
Kiểm tra chữ ký theo phiên bản Windows
SignTool hỗ trợ tùy chọn /o để chỉ định phiên bản hệ điều hành dùng làm cơ sở cho quá trình xác minh.
Cú pháp:
signtool verify /pa /o PlatformID:VerMajor.VerMinor.BuildNumber "C:\Release\MyApplication.exe"
Microsoft khuyến nghị sử dụng /o trong những trường hợp cần xác minh theo một phiên bản Windows cụ thể. Nếu không chỉ định, kết quả xác minh trong một số trường hợp có thể khác nhau giữa các phiên bản hệ điều hành.
Đối với quy trình kiểm tra thông thường trên máy hiện tại, có thể sử dụng /pa mà không cần thêm /o. Khi xây dựng quy trình kiểm thử hoặc Release Automation cần kiểm soát môi trường xác minh, /o có thể giúp kết quả rõ ràng và nhất quán hơn.
Kiểm tra file có chữ ký hay không
Một trong những trường hợp đơn giản nhất là xác định file EXE có chứa chữ ký số hay chưa.
Sử dụng:
signtool verify /pa "C:\Release\MyApplication.exe"
Nếu chữ ký hợp lệ, SignTool sẽ trả về thông tin xác minh thành công. Nếu file chưa được ký hoặc chữ ký không thể xác minh, SignTool sẽ trả về thông báo lỗi tương ứng.
Có thể sử dụng /v để tìm hiểu nguyên nhân:
signtool verify /v /pa "C:\Release\MyApplication.exe"
Đây thường là lệnh đầu tiên nên sử dụng khi cần kiểm tra một file EXE đã được Code Signing hay chưa.
Kiểm tra chữ ký khi Windows không hiển thị tab Digital Signatures
Trong một số trường hợp, thông tin chữ ký không xuất hiện như mong đợi trong Windows Explorer. Khi đó có thể kiểm tra trực tiếp bằng SignTool:
signtool verify /v /debug /pa "C:\Release\MyApplication.exe"
Tùy chọn /debug cung cấp thêm thông tin phục vụ quá trình chẩn đoán.
Cách kiểm tra này cũng hữu ích khi SignTool báo quá trình ký thành công nhưng cần xác nhận chữ ký thực sự tồn tại trong file.
Kiểm tra file EXE được ký bằng Catalog
Không phải mọi file trên Windows đều chứa Embedded Signature trực tiếp. Một số file hệ thống hoặc driver có thể được xác minh thông qua Catalog.
Tùy chọn /a yêu cầu SignTool thử các phương thức xác minh có sẵn, trước tiên tìm kiếm trong Catalog Database và sau đó kiểm tra Embedded Signature nếu không tìm thấy chữ ký trong Catalog.
Ví dụ:
signtool verify /a /v "C:\Windows\System32\example.dll"
Đối với file EXE ứng dụng thông thường được ký bằng Authenticode, kiểm tra trực tiếp bằng:
signtool verify /v /pa "C:\Release\MyApplication.exe"
thường phù hợp hơn so với sử dụng /a.
Kiểm tra chữ ký trong Catalog cụ thể
Nếu biết file được xác minh thông qua một Catalog cụ thể, có thể sử dụng tùy chọn /c:
signtool verify /v /pa /c MyCatalog.cat MyFile.sys
Trong đó:
- /c MyCatalog.cat: chỉ định Catalog cần sử dụng.
- MyFile.sys: file cần kiểm tra.
- /pa: sử dụng chính sách Authenticode Verification Policy.
- /v: hiển thị thông tin chi tiết.
Phương pháp này thường liên quan nhiều hơn đến driver và các file được ký thông qua Catalog thay vì file EXE ứng dụng thông thường.
Cách đọc kết quả SignTool Verify
Khi chạy lệnh:
signtool verify /v /pa "C:\Release\MyApplication.exe"
cần chú ý đến một số thành phần chính trong kết quả.
1. Signature Status
Đây là kết quả tổng quát cho biết SignTool có thể xác minh chữ ký hay không.
Nếu chữ ký hợp lệ, kết quả sẽ cho biết quá trình xác minh thành công. Nếu không, SignTool sẽ hiển thị lỗi hoặc cảnh báo để xác định vấn đề.
2. Signing Certificate
Thông tin này cho biết Certificate được sử dụng để ký file. Có thể kiểm tra Subject, Issuer và các thông tin liên quan đến Certificate.
3. Certificate Chain
Certificate Chain cho biết Certificate ký được chain như thế nào đến Intermediate CA và Root CA.
Nếu Chain không thể xây dựng hoặc Root CA không được tin cậy, chữ ký có thể không được xác minh thành công.
4. Timestamp
Nếu file được Timestamp, kết quả xác minh có thể hiển thị thông tin liên quan đến Timestamp Certificate và thời điểm Timestamp.
5. Warning và Error
Không phải mọi thông báo đều có ý nghĩa giống nhau. Một file có thể có chữ ký nhưng vẫn xuất hiện cảnh báo liên quan đến Timestamp, Certificate Chain hoặc Trust.
Do đó, khi phân tích kết quả SignTool, cần xem toàn bộ thông báo thay vì chỉ kiểm tra một dòng kết quả cuối cùng.
Mã trả về của SignTool Verify
SignTool có thể trả về Exit Code sau khi thực hiện lệnh. Điều này đặc biệt hữu ích khi tích hợp SignTool vào script hoặc CI/CD.
- 0: lệnh thực hiện thành công.
- 1: quá trình xác minh thất bại.
- 2: quá trình hoàn tất nhưng có cảnh báo.
Ví dụ trong Command Prompt có thể kiểm tra Exit Code bằng:
signtool verify /v /pa "C:\Release\MyApplication.exe"
echo %ERRORLEVEL%
Trong PowerShell có thể sử dụng:
signtool verify /v /pa "C:\Release\MyApplication.exe"
$LASTEXITCODE
Việc kiểm tra Exit Code cho phép CI/CD xác định liệu file có đủ điều kiện để tiếp tục bước Release hay không.
Kiểm tra chữ ký trong quy trình CI/CD
SignTool Verify có thể được sử dụng như một bước kiểm tra sau khi ký file EXE.
Quy trình có thể được tổ chức như sau:
Build
│
▼
Generate EXE
│
▼
Code Signing
│
▼
Signed EXE
│
▼
SignTool Verify
│
├── Signature
├── Certificate
├── Certificate Chain
└── Timestamp
│
▼
Check Exit Code
│
├── Success ──────► Release
│
└── Failed ───────► Stop Pipeline
Cách triển khai này giúp tránh việc phát hành một file chưa được ký hoặc có chữ ký không thể xác minh.
Ví dụ kiểm tra hoàn chỉnh file EXE
Giả sử file cần kiểm tra là:
C:\Release\MyApplication.exe
Bước đầu tiên, kiểm tra chữ ký bằng Authenticode Verification Policy:
signtool verify /pa "C:\Release\MyApplication.exe"
Nếu cần xem chi tiết Certificate và Certificate Chain:
signtool verify /v /pa "C:\Release\MyApplication.exe"
Nếu muốn kiểm tra tất cả chữ ký:
signtool verify /all /v /pa "C:\Release\MyApplication.exe"
Nếu muốn cảnh báo khi chữ ký không có Timestamp:
signtool verify /all /v /tw /pa "C:\Release\MyApplication.exe"
Nếu cần chẩn đoán sâu hơn:
signtool verify /all /v /debug /pa "C:\Release\MyApplication.exe"
Đây là nhóm lệnh có thể sử dụng để kiểm tra từ cơ bản đến chuyên sâu tùy theo nhu cầu.
SignTool Verify có kiểm tra SmartScreen không?
Không.
SignTool Verify tập trung vào việc xác minh chữ ký và các thành phần liên quan đến Certificate theo chính sách xác minh được lựa chọn. Kết quả Verify thành công không có nghĩa là file chắc chắn sẽ không hiển thị cảnh báo từ Microsoft Defender SmartScreen.
SmartScreen có cơ chế đánh giá riêng liên quan đến danh tiếng và các tín hiệu khác của ứng dụng. Do đó, cần phân biệt giữa:
| Thành phần | Mục đích |
|---|---|
| SignTool Verify | Kiểm tra chữ ký và Certificate theo chính sách xác minh |
| Code Signing Certificate | Xác minh danh tính nhà phát hành và tính toàn vẹn của file |
| Timestamp | Ghi nhận thời điểm chữ ký được tạo |
| SmartScreen | Đánh giá độ tin cậy và danh tiếng của ứng dụng |
Xem thêm: Application Reputation là gì?
Những lỗi thường gặp khi kiểm tra chữ ký bằng SignTool
1. File không có chữ ký
Nếu file chưa được ký, SignTool sẽ không thể tìm thấy Embedded Signature hợp lệ.
Có thể kiểm tra lại bằng:
signtool verify /v /pa "C:\Release\MyApplication.exe"
Nếu file chưa được ký, cần thực hiện Code Signing trước khi Verify.
2. Certificate không được tin cậy
File có thể chứa chữ ký nhưng Certificate Chain không được hệ thống tin cậy.
Các nguyên nhân có thể gồm:
- Root CA chưa được tin cậy.
- Thiếu Intermediate Certificate.
- Certificate đã hết hạn.
- Certificate đã bị revoke.
- Certificate Chain không thể xây dựng.
3. Chữ ký bị hỏng sau khi chỉnh sửa file
Chữ ký số được tạo dựa trên nội dung của file tại thời điểm ký. Nếu nội dung file bị thay đổi sau khi ký, quá trình xác minh có thể thất bại.
Ví dụ:
Build
│
▼
EXE
│
▼
Sign
│
▼
Signed EXE
│
▼
Modify EXE
│
▼
Verify
│
▼
Signature Invalid
4. Có chữ ký nhưng thiếu Timestamp
File có thể được ký thành công nhưng không có Timestamp.
Có thể sử dụng:
signtool verify /tw /v /pa "C:\Release\MyApplication.exe"
Nếu cần phát hiện vấn đề này trong CI/CD, có thể xử lý Exit Code và thông báo cảnh báo theo chính sách của quy trình Release.
Xem thêm: Hướng dẫn sử dụng SignTool để ký file EXE
Kiểm tra chữ ký bằng SignTool và Windows Explorer
SignTool và Windows Explorer phục vụ hai nhu cầu khác nhau.
| Phương pháp | Ưu điểm |
|---|---|
| Windows Explorer | Dễ sử dụng, phù hợp kiểm tra nhanh bằng giao diện |
| SignTool Verify | Hiển thị thông tin chi tiết và phù hợp với Script, CI/CD |
Đối với việc kiểm tra thủ công một file, Windows Explorer có thể đủ dùng. Đối với môi trường phát triển và phát hành phần mềm, SignTool phù hợp hơn vì có thể tự động hóa quá trình xác minh.
Quy trình kiểm tra chữ ký được khuyến nghị
Một quy trình kiểm tra file EXE có thể thực hiện theo các bước:
Signed EXE
│
▼
Verify Signature
│
▼
Check Certificate
│
▼
Check Certificate Chain
│
▼
Check Timestamp
│
▼
Check Exit Code
│
▼
Release / Reject
Trong đó, lệnh cơ bản có thể sử dụng là:
signtool verify /v /tw /pa "C:\Release\MyApplication.exe"
Nếu file có khả năng sử dụng nhiều chữ ký, có thể thêm /all:
signtool verify /all /v /tw /pa "C:\Release\MyApplication.exe"
Kết luận
SignTool Verify là công cụ quan trọng để kiểm tra chữ ký số của file EXE trên Windows. Với lệnh signtool verify, có thể xác minh chữ ký, Certificate và trạng thái tin cậy của file theo chính sách xác minh được lựa chọn.
Đối với file EXE được ký bằng Code Signing Certificate, lệnh signtool verify /v /pa là lựa chọn phù hợp để kiểm tra chi tiết chữ ký Authenticode. Có thể sử dụng thêm /all để kiểm tra nhiều chữ ký, /tw để phát hiện chữ ký không có Timestamp và /debug khi cần phân tích lỗi.
Trong quy trình phát hành phần mềm, Verify nên được thực hiện sau bước Code Signing để đảm bảo file được ký đúng trước khi đưa vào Package hoặc Release. Tuy nhiên, kết quả Verify thành công chỉ phản ánh trạng thái chữ ký và Certificate theo chính sách xác minh; điều này không đồng nghĩa với việc ứng dụng chắc chắn vượt qua các cơ chế đánh giá danh tiếng như Microsoft Defender SmartScreen.
Bạn vẫn chưa biết nên chọn…?
Đừng lo lắng, đội ngũ chuyên gia của chúng tôi luôn sẵn sàng lắng nghe nhu cầu và tư vấn giải pháp bảo mật phù hợp nhất cho website và doanh nghiệp của bạn. Hãy liên hệ ngay để được hỗ trợ nhanh chóng, chính xác và hiệu quả.