Câu hỏi của tôi có liên quan đến cái này . Than ôi, câu hỏi đó là về một CA (Symantec) khác và sử dụng mã thông báo phần cứng khác (từ Safenet) và trong khi (các) giải pháp được cung cấp phù hợp với mã lỗi, thì trường hợp của tôi không (trong số những thứ khác là thẻ thông minh Tôi đã được cung cấp mà dường như không đăng ký nhà cung cấp riêng của mình theo HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers).
Tôi đang sử dụng chứng chỉ ký mã nguồn mở từ certum.pl. Tôi đang sử dụng signtool.exetừ SDK Windows 10.0.18362.0và tôi gặp lỗi sau (với signtool sign /v /debug):
signtool.exe sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /fd sha256 /tr "http://timestamp.digicert.com" /td sha256 "mysoftware.exe"
The following certificates were considered:
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
After EKU filter, 2 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
Issued to: Open Source Developer, ...
Issued by: Certum Code Signing CA SHA2
Expires: ...
SHA1 hash: ...
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-1073741275/0xc0000225)
SignTool Error: An unexpected internal error has occurred.
Mã lỗi 0xC0000225khớp chính xác như sau NTSTATUS:
//
// MessageId: STATUS_NOT_FOUND
//
// MessageText:
//
// The object was not found.
//
#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
... Điều này có ý nghĩa hoàn hảo, được cung cấp HRESULTcác mã được sử dụng bởi signtool.exevà bản đồ cơ sở hạ tầng cơ bản 1: 1 NTSTATUS(tất nhiên nếu mã cơ sở được cung cấp, HRESULTcác mã tồn tại không có tên trong ntstatus.h... ý tôi là bố cục của HRESULTvà NTSTATUS).
Than ôi, điều này không cho tôi biết bất cứ điều gì, vì rất nhiều thứ có thể không được tìm thấy tại bất kỳ thời điểm nào ... kể từ khi viết bài này, tôi vẫn đang cố gắng thu hẹp nó bằng cách sử dụng ProcMon. Đối với lần thử thất bại, tôi thấy 592 NAME NOT FOUNDkết quả trong ProcMon, tương ứng với NTSTATUSmã trên ; hầu hết trong số họ cho các khóa và giá trị đăng ký.
Đây là signtooldòng lệnh đầy đủ một lần nữa:
"C: \ Chương trình tệp (x86) \ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" đăng nhập / v / debug / a / i Certum / ph / du " https: //my.url " / d "mô tả ngắn" / fd sha256 / tr " http://timestamp.digicert.com " / td sha256 "mysoftware.exe"
... và vâng, tôi đã xác minh rằng nó thực sự sử dụng điều đó signtool.exe... thực tế tôi đã thử với x86 và x64 với các đường dẫn đầy đủ để có biện pháp tốt (tập lệnh thực tế của tôi bao gồm một số phức tạp và chuẩn bị môi trường để điều chỉnh PATHđể có thể gọi signtool.exekhông có đường dẫn đầy đủ của nó).
Thật kỳ lạ, nó hoạt động khi ký kết với các bản tóm tắt SHA1 như vậy:
"C: \ Chương trình tệp (x86) \ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" đăng nhập / v / debug / a / i Certum / ph / du " https: //my.url " / d "mô tả ngắn" / t " http://timestamp.digicert.com " "mysoftware.exe"
(sự khác biệt là thiếu /fd sha256và /td sha256cũng như /tthay vì /trURL dịch vụ đánh dấu thời gian, tức là giao thức khác nhau)
Phiên bản của phần mềm ProCertum CardManager là 3.2.0.156, chi tiết theo ảnh chụp màn hình sau:
(Đây là phiên bản mới nhất có sẵn từ trang web của Certum tại thời điểm viết bài này.)
Trong khi đó tôi cũng đã thử với signtool.exe(x86 và 64) từ:
- SDK Windows 8.1
- SDK Windows 10.0.17763.0
... Kết quả tương tự và tôi bối rối về cách tôi có thể giải quyết vấn đề này.

