2016-11-13 121 views
-1

在SSL握手期間,從服務器下載證書的步驟3是可選的。java ssl握手而不下載證書

因此,如果我已將證書與我的客戶端一起分發,那麼如何跳過下載以改善性能?

請注意,我知道如何加載本地證書以及如何信任它。但我不知道如何跳過下載過程,並且在java文檔中沒有找到任何有用的東西。

在此先感謝。

編輯

我的問題是不是使用一個密碼套件不需要證書。我仍然有證書,並希望使用其公鑰進行對稱密鑰交換。

+1

如果您關心的是連接到不使用證書的服務器,這與[如何連接到Java中不發送證書的SSL服務器相同](http://stackoverflow.com/問題/ 29512394 /如何對連接到一個-SSL服務器功能於Java的是 - 犯規 - 發送-A-證書)。如果您詢問有關使用證書連接到服務器的問題,但不再下載*,那麼您將有效地詢問會話簡歷,該會話簡歷與[恢復Java中的恢復TLS連接]重複(http://stackoverflow.com/questions/12318325/resume -TLS-連接在-java的)。 –

+0

@SteffenUllrich其實我問的是連接到帶有證書的服務器,但沒有下載_even在第一次_。那可能嗎? – Immueggpain

+0

您的問題體現了矛盾。如果您使用需要證書的密碼套件,則需要證書。除了握手消息的一種情況外,SSL不使用公鑰進行加密。因此你的問題沒有意義。 – EJP

回答

2

我的問題是不使用不需要證書的密碼套件。我仍然有證書,並希望使用其公鑰進行加密。

我認爲您在TLS中缺少證書的角色。主要任務是提供身份驗證,以便在中間攻擊(即中間聲稱是服務器的人)中防止連接受到攻擊。

有效負載加密不是由證書完成的。它最多用於在基於RSA的密鑰交換中交換加密密鑰。但對於目前推薦的密鑰交換(ECDHE和可能的DHE),根本不需要證書。

這意味着僅將證書用於密鑰交換而不用於身份驗證是沒有意義的,因此沒有支持該密碼的密碼。

+0

其實我使用證書進行身份驗證。但是證書通過離線傳遞作爲本地文件給出。我認爲這裏有證書是有意義的。 – Immueggpain

+2

@Iueueggpain作爲本地文件而不是通過電報提供的證書不可能構成任何可想象的在線對等身份驗證過程的一部分。你沒有任何意義。 – EJP

+1

@Iueueggpain:認證不僅僅是客戶端知道哪個證書是期望的,而是服務器證明它擁有這個證書,即服務器有私鑰。 TLS沒有支持在沒有發送證書的情況下進行證明。 –

1

在SSL握手期間,從服務器下載證書的步驟3是可選的。

我不知道你來自哪裏得到你的步數,但是在發送服務器證書是強制性的,除非在ClientHello消息的客戶說,它接受一個非認證的加密套件,這是具體描述在RFC 2246中是不安全的。

因此,如果我已將證書與我的客戶端一起分發,那麼如何跳過下載以改善性能?

你不行。

請注意,我知道如何加載本地證書以及如何信任它。但我不知道如何跳過下載過程,並且在java文檔中沒有找到任何有用的東西。

當然你還沒有找到它。它不在那裏。在Java文檔或RFC 2246中完全沒有關於它的內容。你已經發明瞭這個要求。這並不意味着Java JSSE或SSL本身都支持它。它沒有。

我的問題不是關於使用不需要證書的密碼套件。我仍然有證書,並希望使用其公鑰進行對稱密鑰交換。

SSL不執行對稱密鑰交換。你再一次在談論一些不存在的東西。如果你想了解SSL,請閱讀RFC 2246.如果你想發明自己的,沒有任何感覺,但不要把它稱爲SSL,並且不要欺騙它,因爲它可以是表現性的,或者與SSL一樣安全,已經有近25年的發展歷史。它不會。

+0

我剛剛讀了RFC5246的第7.4.2節。雖然_服務器必須發送證書消息,只要商定的密鑰交換方法使用證書進行authentication_。但該消息的定義是_ASN.1Cert certificate_list <0..2^24-1>; _。那麼,如果我理解正確的話,那麼我可以發送NO證書並將其稱爲SSL(我想我們正在談論SSL/TLS,畢竟它們只是同一事物的不同版本)。也許你在引用一些過時的材料? – Immueggpain