Hướng dẫn sử dụng SignTool để ký file EXE
Cập nhật lần cuối: 17/08/2026
Hướng dẫn sử dụng SignTool để ký file EXE trên Windows bằng Code Signing Certificate, bao gồm chuẩn bị chứng chỉ, ký bằng PFX, Timestamp, xác minh chữ ký và xử lý các lỗi thường gặp.
SignTool là gì?
SignTool là công cụ dòng lệnh do Microsoft cung cấp để thực hiện các thao tác liên quan đến chữ ký số trên file Windows. Công cụ cho phép ký file, xác minh chữ ký và thêm Timestamp cho file đã được ký.
Đối với file EXE, SignTool thường được sử dụng trong quy trình Code Signing nhằm xác minh danh tính của nhà phát hành và bảo vệ tính toàn vẹn của file sau khi phát hành.
SignTool không cung cấp Code Signing Certificate. Công cụ chỉ sử dụng Certificate và Private Key đã có để thực hiện quá trình ký số.
Xem thêm: SignTool là gì?
Cần chuẩn bị gì trước khi sử dụng SignTool?
Trước khi ký file EXE, cần chuẩn bị các thành phần sau:
- Máy tính Windows.
- SignTool.
- Code Signing Certificate.
- Private Key tương ứng với Certificate.
- File EXE cần ký.
- Timestamp Server nếu muốn thêm Timestamp.
Code Signing Certificate có thể được lưu dưới dạng file PFX hoặc được cài đặt trong Windows Certificate Store.
Trong các hệ thống yêu cầu bảo mật cao, Private Key có thể được lưu trên USB Token, HSM hoặc sử dụng giải pháp Cloud Signing thay vì lưu trực tiếp trên máy tính.
Xem thêm: Code Signing là gì?
Cài đặt SignTool trên Windows
SignTool được phân phối cùng Windows SDK. Sau khi cài đặt SDK, file signtool.exe thường nằm trong thư mục Bin của Windows SDK.
Ví dụ:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
Tùy phiên bản SDK và kiến trúc hệ thống, đường dẫn có thể khác nhau.
Sau khi cài đặt, có thể mở Command Prompt hoặc PowerShell và chạy:
signtool
Nếu SignTool hoạt động bình thường, công cụ sẽ hiển thị cú pháp và danh sách các lệnh hỗ trợ.
Các lệnh chính của SignTool
| Lệnh | Chức năng |
|---|---|
| sign | Ký số file. |
| verify | Kiểm tra chữ ký số. |
| timestamp | Thêm Timestamp cho file đã ký. |
| remove | Xóa chữ ký khỏi file. |
| catdb | Quản lý Catalog Database. |
Trong quy trình ký file EXE thông thường, ba lệnh quan trọng nhất là sign, timestamp và verify.
Kiểm tra Code Signing Certificate
Trước khi thực hiện ký, cần xác định Certificate đang được lưu ở đâu và Private Key có sẵn hay không.
Nếu Certificate được cài đặt trong Windows Certificate Store, có thể mở:
certmgr.msc
Sau đó truy cập:
Personal
└── Certificates
Certificate dùng để Code Signing cần có mục đích sử dụng phù hợp và phải có Private Key tương ứng.
Nếu chỉ có Public Key mà không có Private Key, SignTool không thể tạo chữ ký số.
Xem thêm: Public Key và Private Key là gì?
Ký file EXE bằng file PFX
Đây là phương pháp phổ biến khi Code Signing Certificate và Private Key được lưu trong một file PFX.
Ví dụ:
signtool sign /f MyCert.pfx /fd SHA256 MyApp.exe
Trong đó:
- /f MyCert.pfx: chỉ định file Certificate.
- /fd SHA256: sử dụng SHA-256 làm File Digest Algorithm.
- MyApp.exe: file EXE cần ký.
SignTool hiện đại yêu cầu chỉ định File Digest Algorithm khi ký. SHA-256 là lựa chọn được Microsoft khuyến nghị.
Ký file EXE bằng PFX có mật khẩu
Nếu file PFX được bảo vệ bằng mật khẩu, sử dụng thêm tham số /p.
signtool sign /f MyCert.pfx /p YourPassword /fd SHA256 MyApp.exe
Trong đó:
- /f: chỉ định file PFX.
- /p: mật khẩu của file PFX.
- /fd SHA256: sử dụng SHA-256.
- MyApp.exe: file cần ký.
Không nên lưu mật khẩu Private Key dưới dạng plaintext trong source code, script hoặc repository. Trong môi trường Production nên sử dụng cơ chế quản lý Secret phù hợp.
Ký file EXE bằng Certificate Store
Nếu Certificate đã được cài đặt trong Windows Certificate Store, có thể yêu cầu SignTool tìm Certificate theo Subject Name.
signtool sign /n "My Company Certificate" /fd SHA256 MyApp.exe
Trong đó:
- /n: Subject Name của Certificate.
- /fd SHA256: sử dụng SHA-256.
- MyApp.exe: file cần ký.
Nếu muốn SignTool tự động lựa chọn Certificate phù hợp, có thể sử dụng:
signtool sign /a /fd SHA256 MyApp.exe
Ký file EXE bằng Certificate Thumbprint
Khi máy tính có nhiều Certificate, có thể chỉ định Certificate cụ thể bằng SHA-1 Thumbprint.
signtool sign /sha1 CERTIFICATE_THUMBPRINT /fd SHA256 MyApp.exe
Cách này giúp hạn chế trường hợp SignTool chọn nhầm Certificate khi có nhiều Certificate cùng đáp ứng điều kiện tìm kiếm.
Thêm Timestamp khi ký file EXE
Timestamp là thành phần quan trọng trong Code Signing. Nó ghi nhận thời điểm chữ ký được tạo thông qua một Timestamp Authority.
Với RFC 3161 Timestamp Server, có thể sử dụng tham số /tr và /td.
signtool sign ^
/f MyCert.pfx ^
/fd SHA256 ^
/tr http://timestamp.example.com ^
/td SHA256 ^
MyApp.exe
Trong đó:
- /tr: địa chỉ RFC 3161 Timestamp Server.
- /td SHA256: thuật toán digest sử dụng cho Timestamp.
- /fd SHA256: thuật toán digest sử dụng cho chữ ký.
Có thể sử dụng Timestamp Server của nhà cung cấp chứng thư số, tùy theo dịch vụ mà doanh nghiệp đang sử dụng.
Timestamp giúp ghi nhận thời điểm chữ ký được tạo và hỗ trợ việc xác minh chữ ký sau khi Code Signing Certificate hết hạn, miễn là các điều kiện xác minh chữ ký và Timestamp vẫn đáp ứng yêu cầu.
Xem thêm: Timestamp là gì?
Lệnh hoàn chỉnh để ký file EXE
Một lệnh thường dùng trong quy trình Code Signing là:
signtool sign ^
/f MyCert.pfx ^
/p YourPassword ^
/fd SHA256 ^
/tr http://timestamp.example.com ^
/td SHA256 ^
MyApp.exe
Quy trình có thể hình dung như sau:
MyApp.exe
│
▼
SignTool
│
├── Code Signing Certificate
├── Private Key
├── SHA-256
└── RFC 3161 Timestamp
│
▼
Signed MyApp.exe
Ký file EXE bằng USB Token hoặc HSM
Nếu Private Key được lưu trong USB Token hoặc HSM, không nên xuất Private Key ra file PFX chỉ để sử dụng với SignTool.
Trong trường hợp này, Certificate có thể được cài đặt trong Certificate Store và SignTool sử dụng CSP hoặc KSP của thiết bị để thực hiện thao tác ký.
Ví dụ:
signtool sign /n "My Code Signing Certificate" /fd SHA256 MyApp.exe
Mô hình hoạt động:
Build Server
│
▼
SignTool
│
▼
CSP / KSP / Middleware
│
▼
USB Token / HSM
│
├── Private Key
│
└── Signing Operation
│
▼
Signed EXE
Private Key được giữ trong thiết bị và không cần xuất trực tiếp ra máy tính dưới dạng file.
Xem thêm: HSM là gì?
Kiểm tra chữ ký của file EXE
Sau khi ký, nên kiểm tra lại chữ ký để xác nhận file đã được ký thành công.
Lệnh cơ bản:
signtool verify MyApp.exe
Đối với file ứng dụng thông thường, có thể sử dụng Default Authenticode Verification Policy:
signtool verify /pa MyApp.exe
Để hiển thị thông tin chi tiết:
signtool verify /pa /v MyApp.exe
Thông tin trả về có thể giúp kiểm tra Certificate, Publisher, Certificate Chain và trạng thái xác minh chữ ký.
Kiểm tra chữ ký bằng giao diện Windows
Ngoài SignTool, có thể kiểm tra trực tiếp bằng Windows Explorer.
Right-click MyApp.exe
│
▼
Properties
│
▼
Digital Signatures
│
▼
Chọn Signature
│
▼
Details
Tại đây có thể kiểm tra Publisher, trạng thái chữ ký và thông tin Certificate.
Kiểm tra Timestamp sau khi ký
Nếu file đã được Timestamp, thông tin Timestamp có thể được xem trong phần Digital Signatures của Windows.
Cũng có thể sử dụng:
signtool verify /pa /v MyApp.exe
Khi kiểm tra Production Build, nên xác nhận cả chữ ký và Timestamp thay vì chỉ kiểm tra việc file có chữ ký.
Có thể thêm Timestamp sau khi đã ký không?
Có. SignTool hỗ trợ thêm Timestamp cho file đã được ký.
Ví dụ với RFC 3161:
signtool timestamp ^
/tr http://timestamp.example.com ^
/td SHA256 ^
MyApp.exe
File phải được ký trước khi thực hiện thao tác Timestamp.
SignTool có thể ký nhiều file EXE cùng lúc không?
Có. SignTool cho phép chỉ định nhiều file trong cùng một lệnh.
Ví dụ:
signtool sign ^
/f MyCert.pfx ^
/fd SHA256 ^
/tr http://timestamp.example.com ^
/td SHA256 ^
App.exe ^
Installer.exe ^
Updater.exe
Cách này có thể hữu ích khi một bộ phần mềm chứa nhiều file thực thi cần được ký.
Quy trình ký file EXE trong Production
Đối với phần mềm phát hành cho người dùng, quy trình Code Signing nên được thực hiện sau khi Build và kiểm thử hoàn tất.
Source Code
│
▼
Build
│
▼
EXE
│
▼
Testing
│
▼
Package
│
▼
Code Signing
│
▼
Timestamp
│
▼
Verify Signature
│
▼
Release
Sau khi ký, không nên chỉnh sửa nội dung của file EXE. Nếu file bị thay đổi sau khi ký, chữ ký có thể không còn hợp lệ.
Một số lỗi thường gặp khi sử dụng SignTool
| Lỗi | Nguyên nhân có thể xảy ra |
|---|---|
| No certificates were found | Không tìm thấy Certificate phù hợp. |
| No private key is available | Certificate không có Private Key hoặc SignTool không truy cập được Private Key. |
| The system cannot find the file specified | Sai đường dẫn hoặc tên file. |
| SignTool Error: No certificates were found that met all the given criteria | Certificate không đáp ứng các điều kiện được chỉ định. |
| Timestamp failed | Không kết nối được Timestamp Server hoặc Timestamp Server trả về lỗi. |
| Invalid provider type specified | CSP, KSP hoặc Middleware của thiết bị ký chưa được cấu hình đúng. |
Lỗi thiếu /fd SHA256 khi ký
Một số phiên bản SignTool hiện đại yêu cầu chỉ định File Digest Algorithm.
Nếu sử dụng:
signtool sign /f MyCert.pfx MyApp.exe
có thể nhận được cảnh báo hoặc lỗi liên quan đến việc chưa chỉ định /fd.
Nên sử dụng:
signtool sign /f MyCert.pfx /fd SHA256 MyApp.exe
Tương tự, khi sử dụng RFC 3161 Timestamp cần chỉ định /td:
/tr http://timestamp.example.com /td SHA256
SignTool ký thành công nhưng SmartScreen vẫn cảnh báo
Việc SignTool báo ký thành công không có nghĩa file EXE chắc chắn sẽ không xuất hiện cảnh báo Microsoft Defender SmartScreen.
Code Signing giúp xác minh Publisher và tính toàn vẹn của file, trong khi SmartScreen còn sử dụng các tín hiệu Reputation và những thông tin bảo mật khác để đánh giá ứng dụng.
Do đó, một ứng dụng mới phát hành vẫn có thể xuất hiện cảnh báo ngay cả khi chữ ký số hoàn toàn hợp lệ.
Xem thêm: Vì sao SmartScreen vẫn cảnh báo sau khi ký số?
Những lưu ý khi ký file EXE bằng SignTool
- Sử dụng Code Signing Certificate hợp lệ.
- Sử dụng SHA-256 cho File Digest.
- Nên sử dụng RFC 3161 Timestamp.
- Bảo vệ Private Key khỏi việc sao chép trái phép.
- Không lưu mật khẩu PFX trực tiếp trong source code.
- Không chỉnh sửa file EXE sau khi ký.
- Luôn Verify chữ ký sau khi ký.
- Với môi trường Production, nên cân nhắc USB Token, HSM hoặc Cloud Signing để bảo vệ Private Key.
Kết luận
SignTool là công cụ quan trọng trong quy trình Code Signing trên Windows, cho phép nhà phát triển ký số file EXE bằng Code Signing Certificate, thêm Timestamp và xác minh chữ ký sau khi hoàn tất.
Với trường hợp đơn giản, có thể sử dụng Certificate và Private Key được lưu trong file PFX. Nếu Private Key được bảo vệ bằng USB Token hoặc HSM, SignTool có thể sử dụng Certificate Store cùng CSP hoặc KSP tương ứng để thực hiện thao tác ký mà không cần xuất Private Key ra file.
Một quy trình ký EXE hoàn chỉnh nên bao gồm Code Signing, SHA-256, RFC 3161 Timestamp và Verify. Đồng thời, cần nhớ rằng việc ký số thành công không đảm bảo ứng dụng sẽ luôn vượt qua 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ả.