Cách ký số file CAB bằng SignTool trên Windows

Cách ký số file CAB bằng SignTool trên Windows

Cập nhật lần cuối: 24/08/2026

Hướng dẫn cách ký số file CAB bằng SignTool trên Windows với Code Signing Certificate, bao gồm chuẩn bị chứng thư, thực hiện ký, thêm Timestamp và kiểm tra chữ ký sau khi ký.

CAB là gì?

CAB (Cabinet) là định dạng file nén được Microsoft sử dụng để đóng gói các file và thành phần phần mềm trên Windows. File CAB có thể được sử dụng trong quá trình cài đặt phần mềm, phân phối thành phần hệ thống, cập nhật phần mềm hoặc triển khai các gói liên quan đến Windows.

File CAB có thể được ký số bằng Authenticode để xác minh nguồn gốc và tính toàn vẹn của gói dữ liệu. 

Quy trình ký CAB thường bao gồm:

  • Chuẩn bị file CAB đã hoàn tất quá trình đóng gói.
  • Chuẩn bị Code Signing Certificate và Private Key.
  • Sử dụng SignTool để ký file CAB.
  • Thêm Timestamp vào chữ ký.
  • Kiểm tra lại chữ ký sau khi ký.

Ký CAB giúp xác minh tính toàn vẹn và nguồn gốc của file CAB. Việc ký số không thay thế các cơ chế kiểm tra hoặc yêu cầu bảo mật riêng được áp dụng cho từng loại thành phần Windows.


Xem thêm: SignTool là gì?


Vì sao cần ký file CAB?

File CAB có thể chứa nhiều file được sử dụng trong quá trình cài đặt hoặc cập nhật phần mềm. Nếu file CAB bị thay đổi sau khi được phát hành, nội dung bên trong có thể không còn giống với phiên bản do nhà phát hành tạo ra.

Code Signing cung cấp cơ chế để xác minh:

  • Danh tính của nhà phát hành.
  • Tính toàn vẹn của file CAB.
  • Code Signing Certificate được sử dụng.
  • Certificate Chain.
  • Timestamp của chữ ký nếu có.

Nhờ đó, hệ thống hoặc người dùng có thể kiểm tra tính hợp lệ của gói CAB trước khi sử dụng.

Chuẩn bị trước khi ký CAB

Trước khi ký file CAB, cần chuẩn bị SignTool, Code Signing Certificate và file CAB đã hoàn tất quá trình đóng gói.

1. Cài đặt SignTool

SignTool được cung cấp trong Windows SDK. Sau khi cài đặt, công cụ 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

Có thể kiểm tra SignTool bằng Command Prompt:

signtool

Nếu Windows không nhận diện lệnh, có thể sử dụng đường dẫn đầy đủ tới SignTool.exe hoặc thêm thư mục chứa SignTool vào PATH.

2. Chuẩn bị Code Signing Certificate

Để ký CAB, cần có Code Signing Certificate và Private Key tương ứng.

Certificate có thể được lưu trữ dưới nhiều hình thức:

  • File PFX.
  • Windows Certificate Store.
  • USB Token.
  • Hardware Security Module (HSM).
  • Remote Signing hoặc Cloud Signing.

Trong bài viết này, file PFX được sử dụng để minh họa cách ký CAB bằng SignTool.

3. Chuẩn bị file CAB

Giả sử file CAB cần ký có đường dẫn:

C:\Release\MyPackage.cab

File CAB cần được hoàn tất trước khi ký. Nếu tiếp tục thay đổi hoặc tạo lại CAB sau khi ký, chữ ký của phiên bản trước đó không thể được sử dụng cho file mới.

Ký CAB bằng file PFX

Cách đơn giản để ký CAB bằng SignTool là sử dụng Code Signing Certificate được lưu trong file PFX.

1. Ký CAB bằng PFX

Sử dụng lệnh:

signtool sign /f "C:\Certificates\codesigning.pfx" "C:\Release\MyPackage.cab"

Trong đó:

  • sign: thực hiện quá trình ký số.
  • /f: chỉ định file chứa Certificate và Private Key.
  • codesigning.pfx: file PFX chứa Code Signing Certificate.
  • MyPackage.cab: file CAB cần ký.

2. Ký CAB bằng PFX có mật khẩu

Nếu file PFX được bảo vệ bằng mật khẩu, có thể sử dụng tùy chọn /p:

signtool sign /f "C:\Certificates\codesigning.pfx" /p "YourPassword" "C:\Release\MyPackage.cab"

Không nên lưu mật khẩu PFX trực tiếp trong source code hoặc script được commit vào hệ thống quản lý mã nguồn.

Đối với môi trường production hoặc CI/CD, Private Key nên được bảo vệ bằng Secret Management, HSM, USB Token hoặc dịch vụ Remote/Cloud Signing.

Ký CAB bằng SHA-256

Khi thực hiện Code Signing mới, nên sử dụng SHA-256 thay vì các thuật toán hash cũ như SHA-1.

SignTool cho phép chỉ định File Digest Algorithm bằng tùy chọn /fd:

signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" "C:\Release\MyPackage.cab"

Trong đó:

  • /fd SHA256: sử dụng SHA-256 cho file digest.
  • /f: chỉ định file PFX.
  • MyPackage.cab: file CAB cần ký.

Việc chỉ định rõ /fd SHA256 cũng giúp tránh các lỗi hoặc cảnh báo liên quan đến File Digest Algorithm trên các phiên bản SignTool hiện đại.

Ký CAB và thêm Timestamp

Timestamp nên được thêm vào chữ ký khi phát hành CAB. Timestamp cung cấp bằng chứng về thời điểm chữ ký được tạo và giúp duy trì khả năng xác minh chữ ký trong những trường hợp Code Signing Certificate hết hạn sau đó.

Ví dụ sử dụng RFC 3161 Timestamp:

signtool sign /fd SHA256 /tr https://timestamp.digicert.com /td SHA256 /f "C:\Certificates\codesigning.pfx" "C:\Release\MyPackage.cab"

Trong lệnh trên:

  • /fd SHA256: sử dụng SHA-256 cho file digest.
  • /tr: chỉ định RFC 3161 Timestamp Server.
  • /td SHA256: sử dụng SHA-256 cho Timestamp Digest.
  • /f: chỉ định file PFX.
  • MyPackage.cab: file CAB cần ký.

Timestamp Server thực tế có thể thay đổi tùy Certificate Authority hoặc dịch vụ Timestamp mà tổ chức sử dụng.


Xem thêm: Timestamp là gì?


Ký CAB bằng Certificate trong Windows Certificate Store

Nếu Code Signing Certificate đã được cài đặt trong Windows Certificate Store và Private Key có thể sử dụng được, không nhất thiết phải cung cấp file PFX khi ký.

Có thể sử dụng tùy chọn /a để SignTool tự động lựa chọn Certificate phù hợp:

signtool sign /fd SHA256 /a /tr https://timestamp.digicert.com /td SHA256 "C:\Release\MyPackage.cab"

Cách này phù hợp với máy ký chuyên dụng hoặc môi trường Certificate đã được quản lý tập trung.

1. Chọn Certificate theo Subject Name

signtool sign /fd SHA256 /n "Example Company Ltd" /tr https://timestamp.digicert.com /td SHA256 "C:\Release\MyPackage.cab"

Tùy chọn /n cho phép xác định Certificate dựa trên Subject Name.

2. Chọn Certificate theo Thumbprint

signtool sign /fd SHA256 /sha1 CERTIFICATE_THUMBPRINT /tr https://timestamp.digicert.com /td SHA256 "C:\Release\MyPackage.cab"

Sử dụng Thumbprint giúp xác định chính xác Certificate cần dùng khi Certificate Store có nhiều Certificate.

Ký CAB bằng USB Token và HSM

Code Signing Certificate có thể được sử dụng với USB Token hoặc HSM để hạn chế khả năng Private Key bị sao chép khỏi thiết bị bảo mật.

Mô hình tổng quát:

Code Signing Certificate
          │
          ▼
Windows Certificate Store
          │
          ▼
       SignTool
          │
          ▼
      CSP / KSP
          │
          ▼
    USB Token / HSM
          │
          ▼
      Private Key
          │
          ▼
     Digital Signature
          │
          ▼
       Signed CAB

SignTool sử dụng Certificate và Signing Provider để yêu cầu thiết bị thực hiện thao tác ký. Private Key không nhất thiết phải được xuất thành file PFX trên máy tính.

Cấu hình cụ thể phụ thuộc vào loại USB Token, HSM, CSP/KSP và phần mềm middleware của nhà cung cấp.


Xem thêm: HSM là gì?


Kiểm tra chữ ký của file CAB

Sau khi ký, cần kiểm tra lại chữ ký để xác nhận CAB đã được ký thành công.

Lệnh cơ bản:

signtool verify /pa "C:\Release\MyPackage.cab"

Để hiển thị thông tin chi tiết:

signtool verify /v /pa "C:\Release\MyPackage.cab"

Kết quả xác minh có thể cung cấp thông tin về chữ ký, Certificate và Certificate Chain.

1. Kiểm tra tất cả chữ ký

Nếu file CAB có nhiều chữ ký, có thể sử dụng:

signtool verify /all /v /pa "C:\Release\MyPackage.cab"

Tùy chọn /all yêu cầu SignTool kiểm tra tất cả chữ ký có trong file.

2. Kiểm tra Timestamp

Có thể sử dụng /tw để yêu cầu SignTool cảnh báo nếu chữ ký không có Timestamp:

signtool verify /v /tw /pa "C:\Release\MyPackage.cab"

Điều này hữu ích trong quy trình Release khi muốn đảm bảo các CAB được phát hành đều có Timestamp.

Ký CAB có làm thay đổi file không?

Có.

Quá trình Authenticode Signing sẽ thêm thông tin chữ ký vào file CAB. Vì vậy, file CAB sau khi ký sẽ không còn có nội dung nhị phân hoàn toàn giống với phiên bản trước khi ký.

Do đó, file CAB cần được hoàn tất quá trình đóng gói trước khi thực hiện Code Signing.

Quy trình nên được thực hiện theo thứ tự:

Source Files
    │
    ▼
Build / Package
    │
    ▼
Generate CAB
    │
    ▼
Test CAB
    │
    ▼
Sign CAB
    │
    ├── SHA-256
    ├── Code Signing Certificate
    └── Timestamp
    │
    ▼
Verify CAB
    │
    ▼
Release

Nếu CAB cần được tạo lại hoặc thay đổi sau khi ký, cần ký lại phiên bản CAB mới.

Có cần ký từng file bên trong CAB không?

Không phải lúc nào cũng cần.

Chữ ký của CAB xác minh tính toàn vẹn và nguồn gốc của chính gói CAB. Các file nằm bên trong CAB là những thành phần riêng biệt và có thể có chữ ký riêng nếu cần.

Ví dụ:

MyPackage.cab
    │
    ├── MyApplication.exe
    ├── Core.dll
    ├── Driver.sys
    └── Configuration Files

Trong trường hợp này:

  • MyPackage.cab có thể được ký để xác minh toàn bộ gói.
  • MyApplication.exe có thể được ký riêng.
  • Core.dll có thể được ký riêng.
  • Driver.sys có thể phải tuân thủ quy trình ký driver riêng.
  • File cấu hình hoặc dữ liệu thông thường không nhất thiết phải sử dụng Code Signing.

Đặc biệt, việc ký CAB không đồng nghĩa với việc các file bên trong CAB đều có chữ ký số riêng.

Ký CAB và Driver Signing

Đây là điểm cần phân biệt khi CAB được sử dụng để phân phối Windows Driver.

File CAB có thể được ký, nhưng chữ ký của CAB không thay thế các yêu cầu ký số áp dụng cho driver bên trong.

Ví dụ:

Driver Package
     │
     ├── Driver.sys
     ├── Driver.inf
     ├── Catalog File
     └── Other Files
             │
             ▼
          Package
             │
             ▼
          CAB File

Nếu CAB chứa Windows Driver, cần xem xét riêng yêu cầu về Driver Signing, Catalog Signing và các chính sách triển khai driver của Microsoft.

Do đó, không nên hiểu rằng chỉ cần ký file CAB là toàn bộ driver package bên trong sẽ tự động đáp ứng mọi yêu cầu về chữ ký driver.

Ký CAB trong quy trình CI/CD

SignTool có thể được tích hợp vào pipeline CI/CD để tự động ký CAB sau khi quá trình đóng gói hoàn tất.

Một quy trình cơ bản:

Build
  │
  ▼
Generate CAB
  │
  ▼
Automated Test
  │
  ▼
SignTool Sign
  │
  ├── Code Signing Certificate
  ├── SHA-256
  └── Timestamp
  │
  ▼
SignTool Verify
  │
  ▼
Artifact
  │
  ▼
Release

Việc Verify ngay sau khi ký giúp phát hiện lỗi Certificate, Timestamp hoặc Signature trước khi CAB được đưa vào hệ thống phân phối.

Trong môi trường CI/CD, không nên lưu file PFX và mật khẩu Private Key trực tiếp trong source code. Private Key nên được bảo vệ bằng Secret Management, HSM hoặc dịch vụ Signing phù hợp.

Ví dụ hoàn chỉnh ký và xác minh CAB

Giả sử có:

  • CAB: C:\Release\MyPackage.cab
  • Certificate: C:\Certificates\codesigning.pfx
  • File Digest: SHA-256
  • Timestamp: RFC 3161

Thực hiện ký:

signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\Release\MyPackage.cab"

Sau đó xác minh chữ ký:

signtool verify /v /pa "C:\Release\MyPackage.cab"

Kiểm tra thêm Timestamp:

signtool verify /v /tw /pa "C:\Release\MyPackage.cab"

Đây là quy trình cơ bản để ký và xác minh một file CAB bằng SignTool.

Các lỗi thường gặp khi ký CAB bằng SignTool

1. Không tìm thấy Code Signing Certificate

Nguyên nhân thường gặp là file PFX không tồn tại, sai đường dẫn, sai mật khẩu hoặc Certificate không có Private Key tương ứng.

Cần kiểm tra:

  • Đường dẫn tới file PFX.
  • Mật khẩu PFX.
  • Certificate có Private Key hay không.
  • Certificate có mục đích Code Signing hay không.
  • Certificate còn hiệu lực hay không.

2. SignTool yêu cầu chỉ định File Digest Algorithm

Với các phiên bản SignTool hiện đại, nên chỉ định rõ:

/fd SHA256

Ví dụ:

signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" "C:\Release\MyPackage.cab"

3. Timestamp Server không hoạt động

Nếu Timestamp Server không thể truy cập, quá trình ký có thể không hoàn thành.

Cần kiểm tra:

  • Kết nối Internet.
  • DNS.
  • Firewall.
  • Proxy.
  • URL Timestamp Server.

Đối với RFC 3161, cần sử dụng:

/tr https://timestamp.example.com /td SHA256

4. Verify CAB thất bại

Nếu CAB bị thay đổi sau khi ký, chữ ký có thể không còn hợp lệ.

Có thể sử dụng chế độ kiểm tra chi tiết:

signtool verify /v /debug /pa "C:\Release\MyPackage.cab"

Kết quả chi tiết giúp xác định vấn đề liên quan đến Signature, Certificate Chain hoặc quá trình xác minh.

5. CAB có chữ ký nhưng Certificate không được tin cậy

Việc file CAB chứa chữ ký không đồng nghĩa với việc mọi hệ thống đều tin cậy Certificate đó.

Cần kiểm tra:

  • Root CA.
  • Intermediate CA.
  • Certificate Chain.
  • Validity Period.
  • Revocation Status.
  • Timestamp.

Ký CAB có giúp vượt qua SmartScreen không?

Không thể đảm bảo.

Code Signing giúp xác minh danh tính nhà phát hành và tính toàn vẹn của file, nhưng Microsoft Defender SmartScreen sử dụng nhiều tín hiệu khác để đánh giá mức độ tin cậy của phần mềm.

Do đó, một CAB được ký hợp lệ vẫn không đồng nghĩa với việc mọi cảnh báo bảo mật của Windows sẽ được loại bỏ.

Thành phần Vai trò
Code Signing Xác minh nguồn gốc và tính toàn vẹn của CAB
Code Signing Certificate Xác định nhà phát hành theo Certificate
Timestamp Ghi nhận thời điểm ký
SmartScreen Đánh giá nhiều tín hiệu liên quan đến độ tin cậy của phần mềm

Xem thêm: Application Reputation là gì?


Những lưu ý khi ký file CAB

  • Ký CAB sau khi hoàn tất quá trình đóng gói.
  • Sử dụng Code Signing Certificate phù hợp.
  • Ưu tiên SHA-256 cho chữ ký mới.
  • Sử dụng RFC 3161 Timestamp khi phát hành.
  • Không thay đổi CAB sau khi đã ký.
  • Luôn Verify CAB sau khi ký.
  • Bảo vệ Private Key và không lưu trực tiếp trong source code.
  • Sử dụng HSM, USB Token hoặc Remote/Cloud Signing khi cần bảo vệ Private Key.
  • Nếu CAB chứa EXE, DLL hoặc các thành phần cần xác minh độc lập, có thể ký riêng từng file.
  • Nếu CAB chứa Windows Driver, cần phân biệt Code Signing của CAB với các yêu cầu riêng về Driver Signing và Catalog Signing.

Xem thêm: Code Signing Certificate là gì?


Kết luận

Ký CAB bằng SignTool là một phương pháp sử dụng Authenticode để xác minh nguồn gốc và tính toàn vẹn của file Cabinet trên Windows. Quy trình cơ bản gồm hoàn tất việc đóng gói CAB, sử dụng Code Signing Certificate để ký, thêm Timestamp và cuối cùng dùng signtool verify để kiểm tra chữ ký.

Đối với các gói CAB được phát hành cho người dùng hoặc sử dụng trong hệ thống triển khai phần mềm, nên sử dụng SHA-256 và Timestamp. Private Key cũng cần được bảo vệ phù hợp, đặc biệt trong môi trường CI/CD hoặc hệ thống phát hành phần mềm tập trung.

Cần lưu ý rằng chữ ký của CAB và chữ ký của các file bên trong CAB là hai vấn đề riêng biệt. Đặc biệt với Windows Driver, việc ký CAB không thay thế các yêu cầu về Driver Signing hoặc Catalog Signing của Microsoft.

Bài viết mới nhất

Timestamp Server là gì? Cách hoạt động và vai trò trong Code Signing Code Signing Certificate và SSL Certificate khác nhau như thế nào? Điều gì xảy ra khi Code Signing Certificate bị thu hồi? Điều gì xảy ra khi Code Signing Certificate hết hạn? Code Signing hoạt động như thế nào? Quy trình ký và xác minh chữ ký số

Có thể bạn quan tâm

Gọi điện
Zalo
Google Maps