2010-06-16 27 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