對於我正在編寫的程序,我想使用TLS(或類似的東西)來封裝我的應用程序的協議。這將盡量減少我必須做的工作量以及我可能意外創建的漏洞數量。通過TLS與Java中的Web of Trust進行加密和身份驗證
我的程序設計爲點對點,儘管一個或多個服務器提供一些服務來幫助一個用戶找到另一個(它註冊IP地址/端口組合),但除此之外別無其他。我想讓這個系統非常容錯,因此讓這些服務器充當證書頒發機構是不可接受的,因爲妥協服務器或其密鑰會影響太多用戶。因此我計劃使用信任網。
使用TLS的主要問題是原始TLS 1.2規範(RFC 5246)沒有規定使用OpenPGP證書。它似乎非常以x.509爲中心。 RFC 6091廢棄了RFC 5081並且擴展了RFC 5246,爲我所需要的TLS的擴展做了規定。問題是我不認爲BouncyCastle實現了這個擴展,我找不到一個Java加密庫。我也不想寫我自己/爲卑詩省做出貢獻,因爲我不會犯錯,而且我也很懶。
此問題的另一個問題是BouncyCastle提供了「輕量級客戶端TLS API」,但由於該軟件是P2P,服務器端API也是必需的,因此我可以使用TLS使其相信對等發起連接是客戶端。我非常肯定,一旦握手完成,它就是一樣的。
問題: 有沒有什麼辦法可以使用TLS(我非常懷疑)?是否有像TLS這樣的協議是爲P2P設計的,或者至少可以以這種方式運行(比如我相信TLS可以),但是可以與OpenPGP證書一起使用?如果兩者都不是這樣,我是否應該追求在this question中解釋的想法,並實施我自己的層從TLS的概念?
不幸的是,這是不正確的。 TLS握手需要解析證書。這是RFC 6091擴展到TLS的原因。 – Nikos 2011-04-20 07:52:28
實際上我實現了TLS客戶端和服務器,它們本身並沒有解析證書。所以這是可能的。當客戶端收到服務器證書時,它將blob交給一個外部回調函數,後者發回公鑰以供使用 - 在我的情況下,回調函數將blob解釋爲X.509證書(它被解析和驗證),但它確實可以解釋它們,否則甚至將它們丟棄並使用硬編碼的服務器公鑰,這在一些設置中是有效的。 – 2011-04-20 11:54:36
那麼,您的實現將證書作爲blob處理的事實並不能消除TLS解析這些證書的要求。你只是把它委託給一個回調,但仍然需要解析來完成協議。 – Nikos 2011-04-20 12:07:40