Cách kiểm tra và xác minh chữ ký Code Signing
Cập nhật lần cuối: 04/09/2026
Hướng dẫn cách kiểm tra và xác minh chữ ký Code Signing trên Windows, sử dụng SignTool để kiểm tra chữ ký số, Code Signing Certificate, Certificate Chain, Timestamp và trạng thái hợp lệ của file đã được ký.
Kiểm tra và xác minh chữ ký Code Signing là gì?
Kiểm tra và xác minh chữ ký Code Signing là quá trình sử dụng các công cụ của Windows để kiểm tra chữ ký số được gắn trên file phần mềm, xác định chữ ký có hợp lệ hay không và certificate được sử dụng để ký có được hệ thống tin cậy hay không.
Code Signing sử dụng chữ ký số để xác nhận nguồn gốc của phần mềm và phát hiện việc nội dung file bị thay đổi sau khi ký. Vì vậy, sau khi hoàn tất quá trình ký, việc xác minh chữ ký là bước quan trọng trước khi đưa file vào phát hành hoặc phân phối cho người dùng.
Trên Windows, có thể sử dụng SignTool hoặc PowerShell với Get-AuthenticodeSignature để kiểm tra chữ ký Code Signing.
Các loại file thường được kiểm tra gồm:
- EXE.
- DLL.
- MSI.
- MSP.
- OCX.
- CAB.
- PowerShell Script.
- Một số thành phần Windows Driver.
Verify chữ ký không chỉ kiểm tra file có được ký hay không mà còn giúp xác định chữ ký, certificate và trạng thái xác thực của file.
Xem thêm: Code Signing là gì?
Vì sao cần kiểm tra chữ ký Code Signing?
Quá trình ký file thành công không có nghĩa là có thể bỏ qua bước xác minh. Sau khi ký, cần kiểm tra lại chữ ký để đảm bảo file thực sự chứa chữ ký hợp lệ và certificate được sử dụng đúng với mục đích Code Signing.
Việc xác minh có thể giúp phát hiện:
- File chưa được ký.
- Chữ ký không hợp lệ.
- Nội dung file đã bị thay đổi sau khi ký.
- Certificate không được hệ thống tin cậy.
- Certificate Chain gặp vấn đề.
- Certificate đã hết hạn.
- Certificate đã bị thu hồi.
- Timestamp không thể xác minh.
- Chữ ký không đáp ứng chính sách xác thực của hệ thống.
Đối với phần mềm được phát hành cho khách hàng, verify chữ ký giúp giảm nguy cơ đưa file chưa được ký hoặc có chữ ký lỗi vào package release.
Chữ ký Code Signing được xác minh như thế nào?
Khi một file được ký, hệ thống sử dụng cơ chế chữ ký số để liên kết nội dung file với certificate của nhà phát hành.
Quá trình có thể được hình dung như sau:
File gốc
│
▼
Tính Hash
│
▼
Ký bằng Private Key
│
▼
Code Signing Certificate
│
▼
Signed File
│
▼
Verify
│
├── Kiểm tra chữ ký
├── Kiểm tra Hash
├── Kiểm tra Certificate
├── Kiểm tra Certificate Chain
└── Kiểm tra Timestamp
Khi xác minh, hệ thống kiểm tra mối liên hệ giữa chữ ký, nội dung file và certificate. Nếu nội dung file đã thay đổi sau khi ký, chữ ký có thể không còn hợp lệ.
Kiểm tra chữ ký Code Signing bằng SignTool
SignTool là công cụ dòng lệnh của Microsoft được sử dụng để ký và xác minh chữ ký số cho các file hỗ trợ Authenticode.
Cú pháp cơ bản để kiểm tra chữ ký là:
signtool verify "App.exe"
Trong thực tế, có thể sử dụng /pa để thực hiện xác minh theo chính sách Authenticode:
signtool verify /pa "App.exe"
Để hiển thị thông tin chi tiết hơn:
signtool verify /pa /v "App.exe"
Trong đó:
| Tham số | Ý nghĩa |
|---|---|
verify |
Yêu cầu SignTool xác minh chữ ký của file. |
/pa |
Sử dụng chính sách xác thực Authenticode. |
/v |
Hiển thị thông tin chi tiết trong quá trình xác minh. |
Kiểm tra chữ ký file EXE
Để xác minh chữ ký của file EXE, sử dụng:
signtool verify /pa "App.exe"
Nếu muốn xem thông tin chi tiết:
signtool verify /pa /v "App.exe"
EXE là một trong những loại file phổ biến nhất trong quy trình Code Signing. Sau khi build phần mềm, nhà phát triển thường ký file EXE trước khi phát hành.
Việc verify giúp xác nhận file đã được ký và có thể được hệ thống xác minh theo chính sách Authenticode.
Xem thêm: Cách kiểm tra chữ ký số file EXE bằng SignTool
Kiểm tra chữ ký file DLL
DLL cũng có thể được xác minh bằng SignTool.
signtool verify /pa "Core.dll"
Để xem thông tin chi tiết:
signtool verify /pa /v "Core.dll"
Điều này đặc biệt hữu ích khi một phần mềm chứa nhiều DLL và cần xác định thành phần nào đã được ký hoặc đang gặp lỗi xác minh.
Xem thêm: Cách ký và xác minh file DLL bằng SignTool trên Windows
Kiểm tra chữ ký file MSI
File MSI cũng có thể được kiểm tra bằng SignTool:
signtool verify /pa "Installer.msi"
Để hiển thị thông tin chi tiết:
signtool verify /pa /v "Installer.msi"
Cần phân biệt giữa việc xác minh chữ ký của file MSI và việc xác minh các file bên trong package. Chữ ký hợp lệ của MSI không đồng nghĩa với việc mọi EXE hoặc DLL được chứa trong package đều có chữ ký hợp lệ.
Xem thêm: Cách ký file MSI bằng SignTool
Kiểm tra chữ ký bằng PowerShell
Ngoài SignTool, Windows PowerShell cung cấp cmdlet Get-AuthenticodeSignature để kiểm tra chữ ký Authenticode của file.
Cú pháp:
Get-AuthenticodeSignature "C:\Release\App.exe"
Kết quả trả về thông tin về trạng thái chữ ký và certificate liên quan.
Một số trạng thái thường gặp:
| Trạng thái | Ý nghĩa |
|---|---|
| Valid | Chữ ký được xác minh hợp lệ. |
| NotSigned | File không có chữ ký số. |
| HashMismatch | Nội dung file không còn khớp với chữ ký. |
| NotTrusted | Chữ ký hoặc certificate không được hệ thống tin cậy. |
| UnknownError | Không thể xác định trạng thái do lỗi xác minh. |
Kiểm tra Code Signing Certificate
Verify chữ ký không chỉ dừng ở việc xác định file có chữ ký hay không. Cần kiểm tra certificate được sử dụng để ký file.
Một Code Signing Certificate thường chứa các thông tin như:
- Subject.
- Issuer.
- Validity Period.
- Serial Number.
- Public Key.
- Enhanced Key Usage.
Đặc biệt, cần xác định certificate có mục đích sử dụng phù hợp với Code Signing hay không.
Certificate được dùng để ký phần mềm không chỉ cần còn hiệu lực mà còn phải được hệ thống xác minh theo chuỗi tin cậy phù hợp.
Kiểm tra Certificate Chain của chữ ký
Code Signing Certificate thường nằm trong một Certificate Chain gồm certificate của nhà phát hành và các CA cấp cao hơn.
Root CA
│
▼
Intermediate CA
│
▼
Code Signing Certificate
│
▼
Signed File
Khi verify, hệ thống có thể cần xây dựng và xác minh chuỗi chứng thư này.
Nếu Certificate Chain gặp vấn đề, chữ ký có thể không được hệ thống tin cậy mặc dù file vẫn chứa chữ ký số.
Các thành phần cần kiểm tra gồm:
- Code Signing Certificate.
- Intermediate Certificate.
- Root Certificate.
- Certificate Chain.
- Trạng thái tin cậy của hệ điều hành.
Xem thêm: Certificate Chain là gì?
Kiểm tra Timestamp của chữ ký Code Signing
Timestamp là thông tin được thêm vào chữ ký để ghi nhận thời điểm chữ ký được tạo.
Điều này đặc biệt quan trọng đối với Code Signing Certificate vì certificate có thời hạn sử dụng.
Ví dụ, một file được ký khi certificate còn hiệu lực và được timestamp đúng cách có thể tiếp tục duy trì giá trị của chữ ký sau khi certificate hết hạn, với điều kiện chữ ký và timestamp đáp ứng các yêu cầu xác thực tương ứng.
Do đó, khi xác minh chữ ký Code Signing, cần kiểm tra cả thông tin timestamp thay vì chỉ xem ngày hết hạn hiện tại của certificate.
Xem thêm: Timestamp trong Code Signing là gì?
Điều gì xảy ra nếu file bị thay đổi sau khi ký?
Chữ ký Code Signing được gắn với nội dung của file tại thời điểm ký. Nếu nội dung file bị thay đổi sau đó, quá trình xác minh có thể phát hiện sự khác biệt.
Mô hình hoạt động:
File trước khi ký
│
▼
Hash
│
▼
Digital Signature
│
▼
Signed File
│
▼
File bị thay đổi
│
▼
Verify
│
▼
Hash không khớp
│
▼
Chữ ký không còn hợp lệ
Ví dụ, nếu một EXE đã được ký nhưng sau đó bị chỉnh sửa trực tiếp, giá trị hash của file có thể thay đổi và chữ ký sẽ không còn xác minh được như trạng thái ban đầu.
Đây là một trong những chức năng bảo mật quan trọng của Code Signing.
Certificate hết hạn có làm chữ ký Code Signing mất hiệu lực không?
Certificate hết hạn không nhất thiết đồng nghĩa với việc mọi chữ ký được tạo bằng certificate đó lập tức mất giá trị.
Trong trường hợp chữ ký được timestamp đúng cách tại thời điểm certificate còn hiệu lực, hệ thống có thể sử dụng thông tin timestamp để xác định thời điểm chữ ký được tạo.
Ngược lại, nếu chữ ký không có timestamp phù hợp, việc certificate hết hạn có thể ảnh hưởng đến khả năng xác minh chữ ký tùy thuộc vào chính sách và môi trường xác thực.
Vì vậy, khi kiểm tra một chữ ký Code Signing, cần xem xét đồng thời:
- Thời hạn của Code Signing Certificate.
- Thời điểm ký.
- Timestamp.
- Certificate Chain.
- Trạng thái thu hồi certificate.
Xem thêm: Certificate hết hạn có ảnh hưởng đến chữ ký Code Signing không?
Certificate bị revoke có ảnh hưởng đến chữ ký không?
Revoke là quá trình CA thu hồi certificate trước hoặc trong thời hạn hiệu lực của certificate.
Khi certificate bị revoke, trạng thái thu hồi có thể ảnh hưởng đến quá trình xác minh chữ ký tùy thuộc vào thời điểm ký, timestamp và cơ chế kiểm tra trạng thái certificate.
Do đó, không nên chỉ nhìn vào thời hạn Valid From và Valid To để đánh giá một chữ ký Code Signing. Cần xem xét thêm trạng thái thu hồi và thông tin timestamp.
Xem thêm: Điều gì xảy ra khi Code Signing Certificate bị thu hồi?
Kiểm tra chữ ký hàng loạt bằng SignTool
Khi release package chứa nhiều file, có thể sử dụng Batch Script để kiểm tra chữ ký hàng loạt.
Ví dụ kiểm tra toàn bộ EXE trong thư mục hiện tại:
for %f in (*.exe) do signtool verify /pa "%f"
Trong file Batch Script:
@echo off
for %%f in (*.exe) do (
echo Verifying: %%f
signtool verify /pa "%%f"
)
Nếu cần kiểm tra cả DLL:
@echo off
for %%f in (*.dll) do (
echo Verifying: %%f
signtool verify /pa "%%f"
)
Cách này giúp tự động hóa việc xác minh khi package chứa số lượng lớn file.
Kiểm tra chữ ký trong thư mục con
Với release package có nhiều thư mục con, có thể sử dụng for /r để quét toàn bộ cây thư mục.
Ví dụ:
for /r "C:\Release" %f in (*.exe) do signtool verify /pa "%f"
Trong Batch Script:
@echo off
for /r "C:\Release" %%f in (*.exe) do (
echo Verifying: %%f
signtool verify /pa "%%f"
)
Phương pháp này phù hợp với các package có cấu trúc thư mục phức tạp.
Kiểm tra nhiều loại file bằng PowerShell
PowerShell có thể được sử dụng để kiểm tra nhiều loại file trong cùng một release package.
Get-ChildItem "C:\Release" -Recurse -File |
Where-Object { $_.Extension -in ".exe", ".dll", ".msi" } |
ForEach-Object {
Get-AuthenticodeSignature $_.FullName
}
Script sẽ tìm các file EXE, DLL và MSI trong thư mục và các thư mục con, sau đó trả về trạng thái chữ ký của từng file.
Phân biệt chữ ký hợp lệ và file an toàn
Một chữ ký Code Signing hợp lệ không đồng nghĩa file chắc chắn an toàn.
Chữ ký số chủ yếu giúp xác minh nguồn gốc của file theo certificate và phát hiện việc nội dung file bị thay đổi sau khi ký. Nó không phải là cơ chế đảm bảo rằng phần mềm không chứa mã độc.
Một file độc hại vẫn có thể được ký nếu kẻ tấn công sở hữu hoặc sử dụng được một certificate hợp lệ.
Do đó, verify chữ ký nên được kết hợp với các biện pháp bảo mật khác như:
- Malware scanning.
- Endpoint Security.
- Application Security Testing.
- Software Supply Chain Security.
- Kiểm tra nguồn phát hành phần mềm.
Verify chữ ký 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 và trước khi package được phát hành.
Build
│
▼
Generate EXE / DLL / MSI
│
▼
Code Signing
│
▼
Verify Signature
│
├── PASS ──► Release
│
└── FAIL ──► Investigate
Quy trình này giúp phát hiện các file chưa được ký, chữ ký không hợp lệ hoặc file bị thay đổi trước khi đưa vào production.
Verify chữ ký trong CI/CD
Đối với hệ thống phát hành phần mềm tự động, bước verify có thể được tích hợp vào CI/CD pipeline.
Source Code
│
▼
Build
│
▼
Code Signing
│
▼
Verify Signature
│
├── All Valid
│ │
│ ▼
│ Release
│
└── Verification Failed
│
▼
Stop Pipeline
Pipeline chỉ tiếp tục phát hành khi các file cần thiết đã được ký và xác minh thành công.
Private Key của Code Signing Certificate cũng cần được bảo vệ trong quá trình tự động hóa, đặc biệt khi thực hiện signing trên hệ thống build hoặc CI/CD.
Các lỗi thường gặp khi xác minh chữ ký Code Signing
Một số nguyên nhân có thể khiến quá trình verify thất bại gồm:
- File không có chữ ký.
- File đã bị thay đổi sau khi ký.
- Chữ ký không hợp lệ.
- Certificate không được tin cậy.
- Certificate Chain không đầy đủ hoặc không hợp lệ.
- Certificate đã hết hạn.
- Certificate đã bị revoke.
- Timestamp không hợp lệ.
- Hệ thống thiếu Root CA hoặc Intermediate CA cần thiết.
- Chính sách xác thực của hệ thống không chấp nhận certificate hoặc chữ ký.
Khi gặp lỗi với SignTool, có thể sử dụng:
signtool verify /pa /v "App.exe"
Tùy chọn /v giúp hiển thị thêm thông tin để xác định nguyên nhân của lỗi.
SignTool và PowerShell: nên dùng công cụ nào?
| Tiêu chí | SignTool | PowerShell |
|---|---|---|
| Công cụ xác minh | signtool verify |
Get-AuthenticodeSignature |
| Kiểm tra Authenticode | Có | Có |
| Command Line | Có | Có |
| Batch Verification | Có | Có |
| Tự động hóa | Tốt | Rất tốt |
| CI/CD | Phù hợp | Phù hợp |
SignTool phù hợp khi cần kiểm tra chữ ký trong quy trình Code Signing và CI/CD. PowerShell thuận tiện khi cần xử lý nhiều file, lọc kết quả hoặc xây dựng script tự động hóa.
Kết luận
Kiểm tra và xác minh chữ ký Code Signing là bước quan trọng sau khi ký phần mềm, giúp xác định file đã được ký hay chưa, chữ ký có hợp lệ hay không và certificate có được hệ thống tin cậy hay không.
Trên Windows, SignTool có thể được sử dụng để xác minh chữ ký Authenticode thông qua các lệnh như signtool verify /pa, trong khi PowerShell cung cấp Get-AuthenticodeSignature để kiểm tra và xử lý trạng thái chữ ký bằng script.
Khi xác minh Code Signing, không nên chỉ kiểm tra trạng thái chữ ký. Cần xem xét cả Code Signing Certificate, Certificate Chain, Timestamp, thời hạn certificate và trạng thái thu hồi. Đối với hệ thống phát hành phần mềm, việc tự động hóa verify trong CI/CD cũng giúp giảm nguy cơ đưa file chưa được ký hoặc có chữ ký không hợp lệ vào production.
Xem thêm: Cách ký nhiều file cùng lúc bằng SignTool
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ả.