2011-10-08 230 views
1

我試圖手動驗證嵌入式主板上的證書,因爲它不支持Openssl或其他庫。但是,它具有用於MD5和SHA1哈希和RSA加密的庫。SSL證書籤名驗證

根據我的理解來驗證證書,首先計算證書的SHA1哈希(或MD5);然後使用CA的公鑰對簽名進行解碼以獲得哈希值。這兩個散列值應該相同。

SHA1散列產生一個20字節的值,MD5產生16個字節的值。但是,簽名的RSA解碼不會。如果CA的密鑰是1024位,則解碼簽名將是80字節;如果CA的密鑰是512位,則解碼的簽名將是40個字節。所以我無法真正比​​較20字節的SHA1值與40或80字節解碼簽名。

我做錯了什麼?還是我錯過了一個步驟?

+0

僅供參考:我正嘗試使用嵌入式板來驗證傳入證書。這些證書將由使用Openssl生成的專用CA生成並簽署。 – TSCOconan

回答

1

缺少的位是填充算法。

您可以使用RSA和特定的填充算法,同樣的算法還會告訴您如何獲取結果(解密簽名時)並從中提取實際數據(哈希)。

+0

感謝您的信息, 我有一個後續問題。當我使用openssl簽署證書「openssl ca -config ca.cnf -policy policy_anything -out certs/certificate.crt -infiles request.csr」Openssl使用的默認填充方法是PKCS#5?如果我錯了,沒有辦法改變它,請糾正我?我相信CA命令或ca.cnf文件中沒有任何選項允許我們選擇填充方法? – TSCOconan

+0

我想我在上面的評論中犯了一個錯誤。 Openssl使用PKCS#1進行填充,私鑰/公鑰和所有與證書有關的事情?我想沒有辦法告訴Openssl給我們0填充,因爲我無法在CA命令中找到選項no ca.cnf文件。 – TSCOconan

+0

我不認爲可以使用命令行工具更改填充。如果你想寫一些代碼,這是可能的。但是你需要一個非常好的理由不要填充你的輸入(例如,如果你做自己的填充),否則你可能會在方案中引入弱點。 –