2014-03-06 71 views
1

說我有微不足道的客戶端服務器的PHP SSL應用程序。
- 服務器生成私鑰/公鑰。
- 服務器開始偵聽套接字。
- 客戶端連接到插座:
stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT)客戶端如何在ssl連接中生成公鑰?

它是如何工作的?客戶端正在生成私鑰/公鑰並將其存儲在內存中?

和瀏覽器https相同的問題,瀏覽器使相同?生成私鑰/公鑰?

一般來說:客戶端從哪裏獲取密鑰?

回答

3
  • 服務器生成私鑰/公鑰。

否。服務器已經安裝了公鑰和私鑰。

  • 服務器開始偵聽套接字。

號服務器開始於一個端口監聽這是通過的方式完成的一個插座。

  • 客戶端連接到插座: stream_socket_enable_crypto($插座,真實,STREAM_CRYPTO_METHOD_SSLv3_CLIENT)

是。

它是如何工作的?客戶端正在生成私鑰/公鑰並將其存儲在內存中?

不是。客戶端通常不具有公鑰或私鑰,但是如果它已經安裝,則已經安裝。客戶端不需要這些用於基本SSL的工作。

和瀏覽器https相同的問題,瀏覽器使相同?生成私鑰/公鑰?

參見上文。同樣的答案。

一般來說:客戶端從哪裏獲取密鑰?

我想你正在遭受廣泛的誤解,即SSL僅使用公/私密碼術。它沒有。它使用由對等方獨立協商和計算的對稱會話密鑰。 PKI僅用於SSL以相互認證對等體。

在任何情況下,您在運行時「生成」公鑰/私鑰對的問題都沒有意義。密鑰對僅在對等方已有公鑰時纔有用。

你似乎一直在閱讀大量的錯誤信息。這裏有很多,其中包括所謂的「Linux文檔項目」。這方面的規範性參考文獻是RFC 2246和繼任者,Eric Rescoria也有一本關於SSL的優秀書籍。

+0

要進一步添加,服務器證書允許客戶端驗證服務器,而客戶端證書也允許服務器驗證客戶端。套接字通常指IP地址和端口號的組合。 –

+0

客戶端和服務器使用對稱加密。但他們使用非對稱加密共享對稱密鑰。所以兩個都需要私鑰/公鑰來啓動SSL會話,對嗎? – corvax

+1

@corvax不,他們不'使用非對稱加密共享對稱密鑰'。這是另一個城市神話。他們獨立計算它。正如我在答覆中所說的那樣。它永遠不會被傳輸,並且永遠不會被加密。不,如我所說,它們都不需要公鑰和私鑰來啓動SSL會話。客戶端計算並向服務器發送預主密鑰,該密鑰可能使用服務器的公鑰加密,但這只是一對密鑰對的使用,並且還有其他方式可能發生,具體取決於所選的密碼套件。 – EJP