2013-10-30 86 views
4

我想使用OpenPGP authentication over TLS,但缺乏實現讓我使用臨時解決方案:OpenPGP/X.509橋接證書。OpenPGP/X.509橋:如何驗證公鑰?

的方法是非常相似FOAF使用的方法:
https://svn.java.net/svn/sommer~svn/trunk/misc/FoafServer/pgpx509/src/net/java/dev/sommer/foafserver/utils/PgpX509Bridge.java

基本上,你創建一個轉換的PGP私鑰,包括您的轉換PGP公鑰到證書請求開始的證書請求。然後您使用轉換的PGP私鑰簽署請求。

我用的是「轉換」因爲OpenPGP的和OpenSSL密鑰格式是不兼容的:我必須從中提取OpenPGP的關鍵的關鍵參數,並利用它們形成新的X.509兼容( OpenSSL)密鑰。儘管如此,它按預期工作。

結果是X.509證書與X.509證書的公共密鑰使用的PGP公鑰參數,但無需用戶ID和公共密鑰簽名,從而使其不能用於認證目的。

這裏缺少的是服務器認證。服務器先前已經簽署了用戶的PGP公鑰,但是如何通過X.509橋證書驗證?

即使我使用我的PGP用戶ID作爲我的CN(公用名稱),我如何證明它與原始OpenPGP密鑰中使用的用戶ID相同?
X.509橋證書上沒有公鑰簽名,只有相同的關鍵參數。我可以安全地檢查這些嗎?

儘管我必須在Python中這樣做,但關於如何進行一般操作的任何建議都會非常有用。

回答

1

我得到了密碼的答案: https://crypto.stackexchange.com/a/11709/9284

如果你可以把整個PGP證書中的專有非關鍵擴展,那麼你並不需要找到在一家商店的PGP證書。此解決方案取決於您能夠創建自己的OID並在擴展中插入PGP證書的條件。此外,服務器應該接受這樣的證書並且包含驗證PGP證書的方法。

CA可以接受或拒絕包含PGP證書的請求。它至少應該檢查PGP證書中的密鑰是否與簽名請求中的密鑰匹配。這樣做的一種方法是驗證PGP和X5.09公鑰匹配的模數。