2011-10-28 77 views

回答

2

是的,當然。到目前爲止,最簡單的方法就是使用WinInet,因爲他將爲您完成所有必需的SSL握手。

在套接字之上實現SSL當然是可行的,但將會(更多)更多的工作。如果你走這條路,我會建議OpenSSL;這就是我們過去必須手動使用SSL的情況。

只是在這裏拋出:另一種方法,如果你擁有客戶端和服務器端,並且出於某種原因不能使用Wininet,則需要在上載前加密客戶端上的文件。如果沒有SSL(例如,流量嗅探,中間人,重放攻擊等),您仍然會遇到同樣的漏洞,但至少文件數據是安全的......只要您的加密密鑰本身不被傳輸。

有關使用Delphi的Wininet的SO的例子;請參閱How to send a HTTP POST Request in Delphi using WinInet api

1

使用Indy的TIdHTTP和TIdSSLIOHandlerSocketOpenSSL組件和OpenSSL可以在Delphi中輕鬆實現HTTPS。你將依賴於包含OpenSSL庫。

還有原生Delphi解決方案,如Eldos的SecureBlackBox和N Software的IPWorks SSL。

只要你有所需的組件,實現你自己並不是那麼困難。如果您不需要支持TLS和SSL標準,您甚至可以輕鬆地創建自己的替代品,但是您仍然需要某種形式的非對稱和對稱加密算法,以及如果想要驗證證書的方式做一些密碼保密的事情。

1

添加到兼容HTTPS解決方案的您(也許是不建議使用)名單:

D.使用WinHTTP的API,而不是的WinINet。

WinHttp和WinINet API都非常接近。 但WinHttp比WinINet快得多。

這裏是how Microsoft defines WinHTTP

的Microsoft Windows HTTP服務(WinHTTP)爲開發人員提供一個 服務器支持的,高層次的接口到HTTP/1.1互聯網 協議。 WinHTTP旨在主要用於與HTTP服務器通信的服務器應用程序基於服務器的 方案中。

WinINet被設計爲HTTP客戶端平臺,用於交互式 桌面應用程序,如Microsoft Internet Explorer,Microsoft Office和Microsoft Money。 WinINet顯示一些用戶界面,用於收集用戶憑證等一些操作。 WinHTTP,但是, 以編程方式處理這些操作。 要求HTTP客戶端服務的服務器應用程序應使用WinHTTP而不是WinINet。 有關更多信息,請參閱將WinINet應用程序移植到WinHTTP。

WinHTTP還設計用於系統服務和基於HTTP的 客戶端應用程序。但是,需要 FTP協議功能,cookie持久性,緩存,自動 憑證對話框處理,Internet Explorer兼容性或 下層平臺支持的單用戶應用程序應考慮使用WinINet。

您可以直接使用WinHTTP COM對象(通過後期綁定),或使用低級別API(非常接近WinINet)。參見例如our Open Source unit(Delphi 5至XE2)。這個鏈接有一個優點和缺點表來指代。

只是爲了強調WinHTTP的Interrest:據我發現,微軟的WCF實現使用它的所有HTTP/1.1通信(在我們的同一個單元中也可以看到http.sys kernel mode for the Server side--它也用於WCF)。

相關問題