2011-03-03 36 views
1

我正在爲CodeIgniter構建一個Oauth庫,關於在Oauth中使用RSA-SHA1進行簽名簽名的簡短問題。 所述的Oauth文檔(http://oauth.net/core/1.0/)規定:有關RSA證書和Oauth的問題

9.3.1。生成簽名

簽名基本字符串使用簽署 消費者的每RSA私鑰 [RFC3447](Jonsson在J.和B. Kaliski,「公鑰加密 標準(PKCS)#1:RSA加密; 規格2.1版」) 第8.2.1節,其中K是 消費者的RSA私鑰,男的 簽名基本字符串,S是 結果的簽名字節串:

  S = RSASSA-PKCS1-V1_5-SIGN (K, M) 

的OAuth _signature設置爲S,首先是 base64編碼的每[RFC2045](Freed, N.和N. Borenstein,「多用途 Internet郵件擴展(MIME)部分 一:Internet消息格式 Bodies,」。)部分6.8,然後 按參數編碼的URL編碼 (參數編碼)。

所以我應該假設用戶已經知道他/她的私鑰?還是我需要從私人證書中提取?

謝謝你的時間。

回答

3

沒有「私人證書」這樣的東西。根據定義,證書始終是公開的。

證書具體包含身份(基本上,某事或某人的名字)和公鑰。公鑰可用於驗證使用相應的私鑰生成的簽名。證書中的私鑰是而不是。不幸的是,一些廣泛傳播的「文檔」稱爲「證書」(或「數字身份」或甚至「私人證書」)將相應的私鑰與證書相組合成單個存檔文件組合。這些檔案通常遵循PKCS#12文件格式(通常稱爲「P12」),在Microsoft世界中稱爲「PFX」。 (大多數在實踐中使用密碼學的複雜性是涉及多層層層使用的術語;同樣,OAuth本身稱HMAC/SHA-1爲「簽名」,這是不適當的。)

OAuth文檔說在9.3節:

的RSA-SHA1簽名方法使用RSASSA-PKCS1-v1_5中的簽名算法中所定義的[RFC3447]節8.2(更簡單地稱爲PKCS#1),使用SHA1作爲散列函數用於EMSA-PKCS1-v1_5。假設消費者以超出本規範範圍的方式以驗證的方式向服務提供商提供了其RSA公鑰。

這意味着:

  • 消費者有權訪問RSA私鑰
  • 服務提供者知道「的驗證方式」

以及如何相應的公鑰這些事情已經超出了OAuth規範的範圍。據推測,在某些時候,消費者向服務提供商展示了他的公鑰,可能作爲證書的一部分(服務提供商根據X.509規則進行了適當的驗證),或通過其他確保「驗證」的其他手段。重點在於,使用私鑰計算的簽名是一個有說服力的證據,它是通過控制與服務提供商知道的公鑰對應的私鑰對誰進行相同簽名的數據計算的;服務提供商仍然必須確保公鑰真的屬於它認爲屬於誰的公鑰。證書是一種通用而複雜的方式。

+0

非常感謝,這清除了我有關證書的很多問題。 – 2011-03-03 14:19:57