簡體   English   中英

在 Windows、C++ 和 Java 中加密傳輸中的數據

[英]Encrypt data in transit in Windows, C++ and Java

我需要為我們的客戶端/服務器應用程序加密“傳輸中的數據”。 我們的服務器是用在 Windows 上運行的 C++ 編寫的。 我們的客戶在 Windows 和 Java 上使用 C++。 我們使用 TCP/IP 進行通信,直接調用通常的 Winsock API,如連接、發送、綁定等,並使用我們自己的端口號(都不是 80 或 443)。 當然,Java 客戶端代碼會進行標准的 Java TCP/IP 網絡調用以與 Windows 服務器進行通信。 我還處於調查的早期,我正在嘗試了解所有混亂的技術、協議、密碼等。我發現這篇文章看起來很棒:[ https://www.codeproject.com/Articles/1000189 /A-Working-TCP-Client-and-Server-With-SSL][1]這篇文章的標題是 SSL 但它實際上使用的是 TLS 1.2。 TLS 1.2 似乎對我們來說是一個非常好的解決方案,並且將這些加密調用添加到我們的代碼中應該相當容易。

所以,我的問題是:TLS 是要走的路嗎? 或者,是否有其他更適合的技術? 我不想忽略任何更簡單的事情,例如:“哦,只需打開此設置,您的所有通信都將被加密”。 意思是:讓 Windows 為我們完成所有工作會很好。 我認為 3rd 方 VPN 不適合我們 b/c 我們想要完全控制並且客戶不想信任 3rd 方處理他們的敏感數據。 該解決方案還需要使用 Java 編寫的客戶端。 做一些快速的谷歌搜索:Java 支持 TLS,它應該能夠與我們的 C++ Windows 服務器協商通信,對嗎? 我知道有 HTTPS,但由於我們使用自己的端口號直接調用 Winsock API,因此 HTTPS 似乎不適合我們,對嗎? 我也讀過 OpenSSL,但由於它是一個 C 庫,它似乎不適合 Java,對嗎?

身份驗證:由於我們本質上是一個封閉系統(我們擁有客戶端和服務器),我認為我們只會在服務器上放置一個證書,只有客戶端才能對服務器進行身份驗證。 我不想在客戶端上添加證書。

我最關心的問題之一就是把這件事做好。 我的理解是安全性可能非常棘手,您不想重新發明輪子。 因此,我更喜歡使用一些在 C++ 和 Java 中工作的成熟技術,這些技術很容易添加到我們的代碼中,並提供必要的加密。

如果您確保您的應用程序在其所有網絡通信中使用 TLS,特別是如果您使用數字證書(可用但經常不使用),那么您的加密要求將得到滿足。 由於隧道本身是安全的,因此應用程序不必進一步加密它們的通信。

我做的很,強烈建議使用兩端證書。 證書允許雙方安全地相互識別,它們可以單獨撤銷,並且不能被欺騙。

另一個需要考慮的強大可能性是 VPN,尤其是 OpenVPN。

暫無
暫無

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

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