2013-08-30 36 views
20

Chúng ta cần ký hai tệp nhị phân của chúng tôi với SHA1 và SHA2 bằng signtool.exe, chứng chỉ của chúng tôi hỗ trợ 256 bit SHA2.signtool không có ký hiệu kép SHA2 và SHA1 với dấu thời gian

Sử dụng signtool Windows 8 SDK:

ví dụ:

dấu signtool.exe/như/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll/f "certificate.pfx"/p XXXXXXX "file.dll"

(nơi XXXXXXX là mật khẩu của chúng tôi đối với giấy chứng nhận)

không thành công với các lỗi khó hiểu:

SignTool lỗi: SignedCode :: Đăng lỗi trả về: 0x80070057 Tham số không chính xác. SignTool Lỗi: Đã xảy ra lỗi khi cố gắng ký: file.dll

Ký không có dấu thời gian, ký riêng lẻ dưới dạng SHA1 hoặc SHA256 hoạt động, nhưng chúng tôi cần ký hai dấu và tưởng tượng không có dấu thời gian là không .

Tôi đã thử phiên bản 32 và 64 bit của signtool.exe, đã thử trên máy Win7 và Win8 và thử chơi với các tùy chọn dòng lệnh nhưng không có kết quả. Có ai đã từng gặp vấn đề này trước đây không?

Trả lời

2

Hãy thử sử dụng

signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll 

/tr là dành cho RFC3161 timestamping,/td rõ ràng cho băm để sử dụng.

1

Tôi cũng nhận được lỗi trên, tuy nhiên Nó hoạt động với các tiện ích osslsigncode khi sử dụng tùy chọn '-nest':

osslsigncode sign -pkcs12 cert1.pfx -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in original.exe -out intermediate.exe 
osslsigncode sign -pkcs12 cert2.pfx -nest -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in intermediate.exe -out final.exe 

Dự án chính thức là cho Unix, tuy nhiên tôi đã gõ lên của riêng tôi windows fork .

15

Tôi đã cố gắng làm điều này một cách chính xác và nhận thấy điều sau đây đã thực hiện. Cách tiếp cận này dựa vào việc sử dụng hai chứng chỉ Authenticode, một cho SHA-1 và một cho SHA-256, để đảm bảo các tệp được chấp nhận là hợp lệ bởi Windows Vista và Windows Server 2008 không hỗ trợ được ký bởi chứng chỉ SHA-256 ngay cả khi các thuật toán SHA-1 được sử dụng:

signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /tr http://timestamp.comodoca.com/rfc3161 /td sha1 "FileName.dll" 
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll" 

Lưu ý rằng thumbprints SHA-1 được quy định một cách rõ ràng cho mỗi bước ký sử dụng /sha1 chuyển đổi và rằng /as được sử dụng để thêm chữ ký SHA-256. Nếu không, chữ ký SHA-256 sẽ ghi đè chữ ký SHA-1.

Dấu hiệu khác mà tôi tìm thấy trong quá trình này là chỉ các tệp DLL và EXE mới hỗ trợ chữ ký kép. Trình cài đặt MSI thì không.

Cập nhật 29/12/15:

Định dạng của SHA-1/SHA-256 vân tay là 40 ký tự thập lục phân chuỗi chữ hoa không có dấu cách.Ví dụ:

signtool.exe sign /sha1ABCDEFABCDEF/as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll" 

Cập nhật 30/12/2015

Ký nộp giấy chứng nhận SHA-256 MSI nhưng với một hàm băm SHA-1 sử dụng một lệnh tương tự như dưới đây:

signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi" 
+0

này có ý nghĩa người ta cần mua hai chứng chỉ khác nhau? hoặc là đủ để sao chép và đổi tên? –

+1

Vâng, thật không may (trừ khi có ai biết rõ hơn). Tôi không thể nhận được chứng chỉ SHA-256 được sử dụng để tạo chữ ký SHA-1 để được chấp nhận là hợp lệ trên Windows Server 2008. –

+1

Bất kỳ cơ hội nào bạn có thể cập nhật với định dạng * của dấu vân tay? Chỉ cần sao chép chuỗi từ certmgr.msc không hoạt động. – EricLaw

2

Thêm vào câu trả lời của martin_costello, XP và Vista không hỗ trợ dấu thời gian RFC. Bạn cần sử dụng tùy chọn/t cho chữ ký sha1.

signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "FileName.dll" 
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll" 
10

Tôi biết nó hơi cũ, nhưng tôi đã tham gia vào chủ đề này và có thể một người khác cũng vậy.

Nó sẽ có tác dụng nếu bạn đăng ký đầu tiên với SHA1 và sau đó với SHA256:

signtool.exe sign /f cert_file.pfx /t http://timestamp.comodoca.com/authenticode /p cert_password 
signtool.exe sign /f cert_file.pfx /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 /p cert_password 

Nó làm việc bằng cách sử dụng cùng một chứng chỉ trong cả hai chữ ký. Tôi đã sử dụng signtool từ Windows 10 SDK, không biết nó có hoạt động với các phiên bản trước hay không.

+2

Cảm ơn, điều này đã giúp! Nó làm việc cho tôi và MIS sử dụng signtool Windows 8.1 SDK miễn là tôi đã làm nó theo thứ tự này. MSI cho thấy đáng tin cậy trên Windows 2008. –

+0

[This] (http://support.ksoftware.net/support/solutions/articles/215805-the-truth-about-sha1-sha-256-and-code-signing-certificates -) nói "Lưu ý rằng bạn cần phiên bản 6.3 của Signtool để làm điều này.Nó đi kèm với Windows 8.1 SDK ". – Legolas

0

Tôi nghĩ rằng this link có một số gợi ý hay. Một số được đề cập trong câu trả lời của martin_costello, nhưng bài viết này cung cấp thêm một số chi tiết. Cụ thể:

  • 'Có thể ký hai lần và bao gồm thông báo tệp SHA1 nếu bạn ký SHA1 trước và sử dụng/cho SHA256. Nó chỉ hoạt động với signtool v6.3 từ Windows 8.1 SDK (hoặc mới hơn).
  • Ký kép với 'chữ ký FULL SHA1', cần thiết cho phiên bản cửa sổ trước XP sp3, yêu cầu 2 chứng chỉ khác nhau.

(tôi đã không kiểm tra tất cả điều này bản thân mình mặc dù.)

4

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

Sự cố xảy ra với máy chủ dấu thời gian.

Thay vì sử dụng signtool.exe với điều này

/t http://timestamp.comodoca.com 

Bạn cần phải 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