Implementation

解析 X.509 證書

  • September 23, 2016

我正在為使用 C 作為程式語言的資源有限的平台開發韌體。

有一組加密原語需要實現,包括 AES、GCM/GMAC、ECDSA、ECDH。我們的硬體允許處理所有這些算法(它或多或少是一個加密控制器),並且所有提到的除了 ECDH 之外的東西都已經實現和測試。

對於未來的韌體版本證書處理(僅適用於具有 P256/SHA256 的 ECC,還包括驗證鏈中的證書)作為附加要求。

將證書解析為其原子成分的最佳方法是什麼。例如,我需要訪問公鑰材料,例如到期日期、發行者、主題…

當然,我知道 openSSL,但這太重了,而且會爆炸太多。所以我測試了 mbedSSL(在 Apache 許可下)。這個開源項目會這樣做,但由於內部原因,我不允許使用它。與woolfSSL 類似。無論如何,我只會使用此類庫的一小部分(僅解析證書)……

是否有一些推薦的方法來解析 PEM X.509 證書?我可以使用任何第三方產品嗎?自己寫這樣的解析器複雜嗎?結構描述在哪裡?我最大的擔憂是編寫一個好的 ANS1 解析器和一個 base64 解碼器,但也許它並不像我現在期望的那麼複雜。

是否有一些推薦的方法來解析 PEM X.509 證書?

好吧,這個站點不是用於軟體推薦(軟體推薦是,誰會想到),但如果證書表現良好,則可以為 ASN.1 構造生成程式碼。您需要 ASN.1 的解析器/生成器。

我可以使用任何第三方產品嗎?自己寫這樣的解析器複雜嗎?

網上有各種 ASN.1 和 X.509 庫。自己寫很難嗎?是的,如果您已經了解 ASN.1 / DER ,預計至少需要 3 個月的工作才能寫出相當不錯的東西。

結構描述在哪裡?

ASN.1 和 DER 分別在 ISO/IEC 8824 和 8825-1 規範中進行了描述。X.509 證書和 CRL 在RFC 5280中進行了描述。RFC 的附錄包含 ASN.1 模組。

我最大的擔憂是編寫一個好的 ANS1 解析器和一個 base64 解碼器,但也許它並不像我現在期望的那麼複雜。

與解析 ASN.1 結構相比,創建 base 64 解碼器絕對是小菜一碟。但是,您可以只使用 DER 編碼並在證書中查找路徑(如果您想危險地生活)。在簽名算法的隱式和顯式輸入之間進行轉換時,您可能會遇到一些麻煩,僅舉一個 ASN.1 結構的問題。

請注意,ASN.1 BER/DER 編解碼器非常容易受到堆棧溢出攻擊(尤其是在 C 等非託管語言中),並且證書的解碼在身份驗證之前進行

如果您的資源有限,一種流行的解決方案是使用可驗證卡的證書。這些是具有固定佈局的證書:對於給定的密鑰長度,所有欄位的長度都是預先固定的,因此您不必解析 ASN-1 結構。例如,本文件的附件 B描述了德國健康專業卡中使用的卡可驗證證書的結構。

除非您需要解析成熟的 X.509 證書,否則這是最簡單的解決方案。

引用自:https://crypto.stackexchange.com/questions/40157