2010-07-13 109 views
5

我覺得我在這裏錯過了一些明顯的東西,但是我沒有看到它寫在任何地方。驗證執行.NET應用程序時的驗證碼簽名

我使用Authenticode證書對我的可執行文件進行了簽名,但是由於我已經開始瞭解更多信息,我現在正在質疑這個值。

  • 已簽名的exe文件有一個顯示爲「有效」證書的數字證書。當您從互聯網上下載這樣的文件時,它會在Windows中顯示一條警告,聲明您即將從Xyz公司發佈的潛在不安全位置運行程序。
  • 沒有簽名,下載的文件會給出一個完全不同的外觀的警告框說文件是不可信現在

,讓我憂心忡忡,就是:

  • 如果一個簽名的EXE當您進入「屬性」>「數字簽名」>「選擇簽名」>「詳細信息...」時,它會顯示「此數字簽名無效」。這是一個相當晦澀的方式來查看可能是一個嚴重問題,以及一個巨大的指標,你不應該運行該文件。

    • 如果你從Windows(未下載)運行此文件,它將運行得很好。沒有警告或任何跡象表明有什麼問題
    • 我沒有檢查,如果你下載文件,然後嘗試運行它會發生什麼。
  • 如果從文件中剝離簽名(使用delcert),則沒有任何跡象表明任何錯誤。再次,您可以運行該文件,並且在屬性對話框中只顯示任何證書。


爲了使這更加有用,我在想,一個簽名的文件需要驗證自己。啓動後,應檢查是否有有效的簽名,並且可能簽名的sha1指紋與Xyz Corporation證書的預期簽名匹配。

(當然,這仍然沒有處理,其中有人剝去證書,然後編輯該文件以刪除證書檢查的情況)


我無法找到任何人談論怎麼辦這(至少在.NET,肯定不是一個簡單的API調用,就像我期望的) - 所以這導致了幾個問題:

  1. 有沒有簽名沒有被選中的理由?沒有這種檢查,還有什麼其他好處可以簽署?
  2. 正在試圖驗證簽名是否是一種篡改檢測手段,因此毫無意義嘗試是徒勞的?
  3. 如何在.NET中檢查當前可執行文件的證書?
+1

對於.NET,你應該使用強名稱簽名,不驗證碼。 – 2010-07-13 20:52:01

回答