Câu hỏi Signtool không thể ký SHA256 trên Windows 7


Tôi đã sử dụng ký kết SHA1 trong nhiều năm, nhưng từ năm 2016, Windows buộc các nhà phát triển phải sử dụng SHA256.

Windows thực thi mã xác thực ký hiệu và dấu thời gian

Bằng cách sử dụng Windows 7 SDK signtool các chức năng để ký SHA-256 là "lệnh không rõ", do đó, signtool này là lỗi thời như một signtool và không nên được sử dụng nữa.

Để đăng nhập với SHA256 tôi đã tải về Windows 8.1 SDK để có được signtool.exe mà có các chức năng mới (/ fd và những người khác). Các tập tin BAT và signtool hoạt động trên Windows 8 và 10, vì vậy tôi biết nó hoạt động, nhưng treo trên Windows 7 khi nó cố gắng để timestamp các tập tin.

Signing fails

Tôi sử dụng một tệp dơi để ký các tệp, trông giống như thế này (tôi đã chỉnh sửa tệp BAT để nó không hiển thị các biến, đường dẫn đầy đủ, tên công ty và mật khẩu):

Path\signtool.exe sign /f "Path\Certificate.p12" /fd sha256 /p *password* /du "URL" /tr "timestampServer?td=sha256" /td sha256 /d "Product name" "Filename"

Tôi đoán, tôi không có SDK thích hợp để hỗ trợ một số chức năng, nhưng tôi không thể tìm thấy bất kỳ thông tin nào trên internet về cách thiết lập trên Windows 7. Tôi đã cố cài đặt MS Visual C ++ 2015 Redistributable (x64) , nhưng vẫn không giải quyết được vấn đề.


4
2018-02-08 10:49


gốc




Các câu trả lời:


Cuối cùng tôi đã tìm thấy một giải pháp cho việc ký hai tệp trong Windows 7.

Bí quyết là sử dụng SDK cửa sổ 8 (không phải 8,1 hoặc 10)! Tôi đã sử dụng bản tải xuống này: https://developer.microsoft.com/windows/downloads/windows-8-sdk

Trong Windows 7 x64 hãy chắc chắn trỏ đến x64 nhị phân (...\8.0\bin\x64\signtool.exe)

Như một phần thưởng, đây là một kịch bản hàng loạt thoải mái mà tôi đã thực hiện. Đơn giản chỉ cần lưu nó như là doublesign.bat và kéo một tập tin mà bạn muốn được ký vào tập tin bat đó.

@ECHO OFF

set signtool="C:\path to signtool\signtool.exe"
set certfile="C:\path to certificate\cert.p12"
set certpass="Password"
set company="Optional"

echo Signing with SHA-1
%signtool% sign /f %certfile% /p %certpass% /t http://timestamp.comodoca.com/authenticode %1
timeout /T 3
echo. & echo Signing with SHA-256
%signtool% sign /f %certfile% /p %certpass% /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 %1

@PAUSE

4
2017-07-01 14:47



Tôi đã không thử nghiệm này khi tôi chuyển lên cửa sổ 10 cách đây không lâu. Nhưng câu trả lời của bạn là tốt nhất vào lúc này, vì vậy tôi đã đánh dấu câu trả lời này là câu trả lời đúng. - Frank Jelstrup


Vấn đề thực sự là cách đơn giản hơn.

Vấn đề là với máy chủ tem thời gian.

Thay vì sử dụng signtool.exe Với cái này

/t http://timestamp.comodoca.com 

Bạn cần sử dụng nó như thế này cho SHA1

/tr http://timestamp.comodoca.com /td sha1

Và đối với SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256

1
2018-01-14 23:33



Các lệnh của bạn vẫn khiến signtool gặp sự cố cho tôi; Tôi đoán bạn đang sử dụng signtool từ Windows 8 SDK - Cocowalla


Có vẻ như tôi không giỏi đọc, tôi cũng trả lời câu hỏi của mình vì những người khác có thể thấy khó tìm, giống như tôi.

Windows không hỗ trợ signtool.exe trên Windows 7 nữa, vì vậy đó là lý do tại sao các chức năng cũ / lỗi thời như ký kết SHA-1 vẫn hoạt động, nhưng thời gian dán SHA-256 là một vấn đề. Tôi tìm thấy điều này trên MSDN:

Trích dẫn từ MSDN: Lưu ý Bạn chỉ có thể sử dụng SignTool để ký Windows của bạn   Lưu trữ các gói ứng dụng trên Windows 8 trở lên hoặc Windows Server 2012 và   một lát sau. Bạn không thể sử dụng SignTool để ký gói ứng dụng ở cấp độ xuống   các hệ điều hành như Windows 7 hoặc Windows Server 2008 R2.

Nếu bạn muốn đọc toàn bộ nội dung thì hãy xem tại đây:

Cách ký gói ứng dụng bằng SignTool


0
2018-02-10 15:57



Tuy nhiên, đây chỉ là về các gói appx. Nó chỉ nói rằng bạn không thể ký các gói appx trên các phiên bản Windows sớm hơn 8. - Daniel B
Đúng, nhưng nếu bạn xem cách ký kết hoạt động, thì việc ký chỉ thêm một lớp phủ vào cuối tệp. Lớp phủ này chứa các thông số khác nhau cho tệp, do đó nếu tệp đó bị thay đổi, ký sẽ bị hỏng và không đáng tin cậy nữa. Nó giống như một kiểm tra CRC tiên tiến. Việc ký các gói / tệp appx hoặc bất kỳ tệp nào khác về mặt kỹ thuật giống nhau, giống như thực hiện kiểm tra CRC của bất kỳ loại tệp nào. Tôi vẫn tin rằng câu trả lời của tôi là hợp lệ cho đến khi được thuyết phục khác. - Frank Jelstrup
Các loại tệp khác nhau được ký khác nhau. Nhưng đó không phải là vấn đề: Bài viết trên MSDN không đơn giản là về .exe tất cả các tệp. Nó được áp dụng chỉ cho các gói appx. Bạn đã cố gắng sử dụng công cụ Windows 8 trên Windows 7. Công cụ này không hoạt động. Tuy nhiên, điều đó không có nghĩa là bạn không thể sử dụng phiên bản SignTool của Windows 7 SDK để tiếp tục ký .exe các tập tin. - Daniel B
Các công cụ Windows 7 không có các tùy chọn cần thiết để thực hiện ký kết SHA-256 và dấu thời gian, do đó, nó có nghĩa là Windows 7 SDK signtool không nên được sử dụng (Sẽ thêm điều này vào câu hỏi, thông tin tốt). Tôi biết rằng MSDN viết gói ứng dụng, nhưng cá nhân tôi hy vọng rằng đó là tất cả các tệp và họ sử dụng appx làm ví dụ về tệp. Giả định này được thực hiện khi tôi sử dụng signtool để ký tất cả các loại tệp, thậm chí các định dạng tệp mà tôi tạo ra. Cảm thấy tự do để tìm một câu trả lời tốt hơn, sau đó tôi sẽ cung cấp cho bạn câu trả lời đúng :) - Frank Jelstrup