2013-07-23 93 views
0

我一直在Google搜索全部解決方案,並且什麼也沒有發佈。 我有一個用C#編寫的REST服務(使用WebServiceHost類),並且我試圖實現一個簡單的任務:只使用證書,無加密,SSL或HTTPS的服務器和客戶端的相互身份驗證HTTP請求。在REST服務(不是SSL/HTTPS)中驗證帶有證書的http請求

目前我可以使用網絡瀏覽器訪問http://localhost:8000/MyService/Items/abc,我收到服務器的響應,但我無法讓服務器請求使用證書進行身份驗證。 我能做的就是讓服務器讓用戶使用AD用戶名和密碼標識自己。

編輯:
作爲(另一)阿維解釋 - 這是不可能具有通過HTTP自動證書驗證作爲協議不發送或收到的證書。 這是可能的唯一方法是編寫旅遊自己的「SSL-like」協議,它可以在HTTP上工作,這會使來回調用的次數翻倍,並且在各方面都比內置的SSL/TLS差可能。

+0

這是否有幫助[一種簡單的方法來使用WCF安全證書](http://www.codeproject.com/Articles/18601/An-easy-way-to-use -certificates換WCF的安全性)? –

+0

不好,似乎沒有做任何事情:( –

回答

1

您是否使用.net客戶端來調用Rest服務?如果是,您可以將證書附加到HttpWebRequest請求。 request.Certificates.Add(certficate)。 check this link for configuring server for client certificate request

您需要啓用ssl來選擇需要客戶端證書。其他選項是接受證書,在這種情況下,它將允許用戶訪問資源,並且如果客戶端不提供證書,則需要提供其他認證用戶的方式。 所有這些只有在從複雜框架(如.net/Java)訪問時纔有效。如果你嘗試從JavaScript訪問我不認爲你可以附加客戶端證書。只有瀏覽器才能發送客戶端證書(要求客戶端證書設置)作爲普通http請求的一部分。

我提到的任何選項都需要ssl通信。使用HTTP只有你不能擁有客戶端證書。 假設您僅使用.net客戶端 第一次請求 - 將客戶端證書公鑰密鑰發送到服務器。服務器通過查找公鑰來查找服務器中是否存在證書。只有有效的用戶公鑰證書存儲在服務器中。如果存在將令牌(比方說345)發送給客戶端。 客戶端爲令牌簽名併發送簽名數據(令牌345 +加密令牌876)。 服務器獲取令牌的公鑰(存儲在第一個請求中)並驗證簽名(解密876並與令牌比較)。如果它們匹配,則認證請求其他無效。

這只是爲了瞭解如何爲每個請求設置auth的信息。爲什麼你不應該使用它 - 你會最終有2個要求每個電話不好。 - 您需要檢查有效性以及證書是否有效(它未被CA撤消),因此基本上,您最終將得到像ssl通信(減去需要加密令牌的請求/響應本身)

簡單的說法你不能有沒有ssl的客戶端證書認證機制

+0

首先感謝回覆。 1.在這個早期階段,我從瀏覽器調用我的服務,但後來它將從.NET代碼中調用。 2。那麼從我所瞭解的可能編寫自定義身份驗證方法的地方,我可以在其中編寫證書身份驗證邏輯? 你能否指示我通過HTTP的這種自定義身份驗證的例子?這聽起來正是我需要的。 –

+0

編輯回覆.. – avi

+0

所以基本上,唯一的辦法就是編寫我自己的「類似於SSL的」協議,它可以通過HTTP工作,這會使來回調用的次數增加一倍,而且不如內置SSL/TLS以各種可能的方式進行。 非常感謝! –

相關問題