簡體   English   中英

在 C# 中臨時加載用於客戶端身份驗證的 SSL 客戶端密鑰

[英]Temporarily load SSL Client Key for Client Authentication in C#

我正在使用 WebBrowser 控件將 WebInterface 添加到 C# 應用程序。 我的願望是驗證只有這樣的應用程序才能使用 SSL 客戶端證書連接到我們的 Web 服務器。

我的想法是將客戶端證書嵌入到應用程序中,並在通過我的應用程序連接時使用。 有人對如何做到這一點有建議嗎? 或者讓它工作的唯一方法是在 X509Store 中加載密鑰。

如果我將它放在 X509Store 中,它是否會使我的密鑰可用於一般 Internet Explorer 使用?

所以,這里有幾個想法:

1.

我同意 'erickson',用你當前的設計來驗證只有你的應用程序可以與應用程序通信幾乎是不可能的。 有人對您的應用程序進行逆向工程,然后游戲結束(如果這只是您的安全形式),這只是時間問題。 如果您想驗證它是您的應用程序和有效用戶,那么您需要對用戶進行身份驗證以及檢查相關應用程序簽名的某種機制(我認為這在客戶端 - 服務器模型中是不可能的。 ..畢竟我總是可以撒謊說我的“hackyou”應用程序與您的“realapp”應用程序具有相同的簽名,並且您無法從服務器端進行驗證)

2.

請記住,WebBrowser 控件本質上是 IE 的包裝器,因此如果沒有一些技巧(我將在稍后介紹),您將不得不將證書添加到用戶存儲中。

3.

這是一種完成您所要求的操作的hacky方法(即使這是一個壞主意):

  • 首先使用WebRequest.Create創建一個 HttpWebRequest 對象
  • 從文件或程序中編碼的二進制流中手動加載 X509Certificate2 對象
  • 使用HttpWebRequest.ClientCertificates將您的證書添加到 webrequest
  • 發送請求,得到響應
  • 通過將 HttpWebResponse 的 ResponseStream 推送到 WebBrowser 的 DocumentStream 將響應發送到 WebBrowser

這實質上意味着您將不得不編寫一些包裝類來處理與服務器之間的請求和響應,並且僅使用 WebBrowser 來處理 HTML 的查看。

實際上,您需要重新設計並查看您要處理的威脅!

你確定這是你想要做的嗎? 如果您將私鑰嵌入到您的應用程序中(正如您的方法所需要的那樣),攻擊者可以提取它並使用它來驗證他們的流氓軟件。

服務器無法驗證客戶端軟件。 它只能測試客戶端是否擁有某個秘密。 當您在客戶端中嵌入私鑰並分發它時,它就不再是秘密了。

我建議對您的軟件的用戶進行身份驗證,而不是對軟件本身進行身份驗證。 您需要讓用戶生成他們自己的秘密,無論是密碼還是私鑰,並激勵他們保護它。

使用密鑰的目的不是驗證用戶,而是限制對應用程序用戶的訪問,而不是使用任何 WebBrowser。 這是一種通過公共互聯網的內部網行為。

這是窮人的DRM。 由於人們提取密鑰而造成的損失並不那么重要。 我認為發生這種情況的風險很低,我們可能失去的東西也很小。

盡管如此,如果有任何其他想法將 WebServer 的訪問權限限制為僅該應用程序的用戶,我願意接受任何建議。 基本上,我現在的願望是擁有一個公開的 Web 服務器,任何人都可以閱讀,但是從不同的地方通過公共網絡進行訪問是必要的,因此也無法建立內部網基礎設施。

暫無
暫無

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

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