簡體   English   中英

Delphi Indy-如何使用Indy 10為SSL-TCP客戶端/服務器鏈接獲取SSL證書

[英]Delphi Indy - How to get SSL certificates for a SSL-TCP Client/Server link with Indy 10

我對SSL和這些加密技術完全陌生,但是我需要使通信客戶端和服務器在移動設備上運行的Delphi XE6應用程序有效。 必須對TCP通信進行安全加密。

首先,我只寫了基於Delphi / Indy TIdTCPServer / TIdTCPClient的Win32客戶端和服務器交換字符串。 (摘自SourceForge上的indy10clieservr演示:svn://svn.code.sf.net/p/indy10clieservr/code/1_sample簡單字符串交換)

我試圖通過在服務器上添加TIdServerIOHandlerSSLOpenSSL組件,並在客戶端上添加TIdSSLIOHandlerSocketOpenSSL組件,將它們分別添加到TIdTCPServer和TIdTCPClient上,以對它們進行加密以加密通信。

我在兩側都設置了以下屬性:-SSLOptions.Method = sslvSSSv23-SSLOptions.Mode = sslmServer / sslmClient(分別)-SSLOptions.VerifyDepth = 2

我還添加了一個OnGetPassword事件處理程序,也在兩側將Password參數設置為'password'。 (此密碼的作用是什么?對於通信的私密性至關重要嗎?如果通過分析/反向處理二進制文件找到了該密碼,該怎么辦?)

最后,在服務器的OnConnect事件處理程序中,我將TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough屬性設置為false。

但是3個SSLOptions證書屬性呢? -CertFile-KeyFile-RootCertFile

如何在目標設備上生成和部署它們,以使我的SSL層在客戶端和服務器上運行?

此外,如果我打算以后在IOS或Android移動設備上部署我的服務器和/或客戶端,還有什么特別的事情要做或要考慮的。

我知道我對此SSL主題知之甚少。 對不起,如果我問些瑣碎的事情。 任何向新手解釋所有這些棘手問題的基本文檔,將不勝感激。

正如我在Embarcadero論壇上回答您的相同問題時告訴您的那樣,證書是可選的。 它們用於允許對等方驗證彼此的身份,而不用於加密。 證書通過允許客戶端驗證其是否已連接到期望與之連接的正確服務器上,反之亦然,從而有助於避免中間人攻擊。 客戶端通常不具有證書,除非在建立僅允許授權客戶端連接的專有系統時。 但是,至少有服務器具有證書是很普遍的。 證書可以受密碼保護,因此,如果您確實要使用它們,則必須為實際使用的證書提供正確的密碼。 無法從證書本身中檢索證書的密碼,但是,如果攻擊者獲得了對您的證書文件的訪問權限,那么您將面臨更大的問題。

對於SSLv23,它是一個通配符,在客戶端和服務器支持不同的SSL / TLS版本的情況下允許進行動態版本協商。 SSLv23允許他們找出並使用雙方通用的最高版本。 如果服務器需要支持廣泛的客戶端,則在服務器端使用SSLv23是有意義的。 在客戶端沒有那么多。 由於同時控制客戶端和服務器,因此應該使用特定版本,最好是TLSv1或更高版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM