2010-06-16 70 views
1

我製作了一個Silverlight 3.0應用程序,它通過https與xml rpc服務器進行通信。整個應用程序將在LAN環境中運行,其中服務器可以安裝在不同的機器上,客戶機將安裝在同一臺機器上。我正在使用針對服務器的ip生成的自簽名證書,並且我需要在客戶端計算機上輸入受信任的根證書頒發機構。但是如果我想與第二臺服務器通信,那麼需要在客戶端機器上安裝另一個證書,以針對該特定服務器的IP,簡而言之,如果我想在n個不同的服務器上進行通信,則需要在客戶機上安裝n個證書,這對我來說是不可能的,我怎樣才能通過局域網環境中的單一證書來做到這一點。證書是根據服務器的ip或主機名生成的,有沒有辦法通過SSL證書的驗證?像用於LAN環境的SSL證書

ServicePointManager.ServerCertificateValidationCallback = MyCertHandler; 

static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error) 
{ 
// Ignore errors 
return true; 
} 

但上面的代碼不能在Silverlight中使用?任何幫助?

回答

1

不使用自簽名證書,並且如果您可以忽略身份驗證,那麼沒有充分的理由使用ssl。

爲避免自簽名證書: 設置個人CA(非常容易處理微軟的CA)。然後從您自己的CA頒發服務器證書,並將CA的證書作爲受信任的根頒發給每臺服務器。然後,你最終像設置:

證書鏈:

  • 一個簽名b。
  • 一個簽名ç
  • 一個簽名d
  • 已簽名

部署:

  • 服務器B獲得A和B
  • 服務器C得到A和C
  • 服務器d得到A和d
  • 服務器E得到A和E

然後客戶端連接到任何這些服務器可以將通用名稱與其所連接的地址進行匹配,根據現在的時間對其有效的日期範圍進行匹配,併爲每個服務器的「CA Cert A」構建一個驗證鏈。

(這裏是一個隨機起始鏈接,用於設置您自己的CA服務器。) link text

如果您嘗試使用自簽名你會

證書鏈endup:

  • 乙雙方簽署乙
  • Ç簽署Ç
  • d簽訂d
  • Ë簽署E

證書部署

  • 服務器B得到B,C,d,E
  • 服務器C得到B,C,d,E
  • 服務器d得到B,C,d,E
  • 服務器E得到B,C,D,E