保护Azure Web角色WCF服务的最简单方法



使用最新的VS 2013和Azure SDK 2.4,我在其中创建了一个Web角色和WCF服务。此服务将由标准生成的.NET服务引用客户端代理使用。

我试图弄清楚什么是最简单的方法来保护这个WCF服务。我的意思是,保护身份验证不可能被黑客入侵的简单方式,如明文密码等

关于用例的一些附加信息:

  • 将只有一个用户
  • 在客户端存储任何秘密(如用户名/pwd或证书)是完全可以的,因为客户端应用程序将在安全的地方运行
  • 我只是想阻止公众访问我的服务。只有我运行客户端应用程序的安全位置才能访问它,我不想再多也不想少

所以我在网上搜索,我读得越多,我就对我认为不需要的选择和可能性感到困惑和不知所措。在搜索客户端证书时,我发现服务器端临时证书等联合身份验证方法过于复杂,我不确定我的简单用例是否需要这些方法。

感谢您的帮助。提前感谢

如果您真的想限制访问,那么我会查看客户端证书。在一篇SO文章中详细描述为客户端证书配置azure似乎相当复杂,所以我将向您介绍这篇博客文章windows azure中的客户端证书,我将在下面总结[我最近自己也用过这个,所以我知道它有效]

本质上,您可以使用makecert制作自己的证书[注意:您可能需要为您的网站提供官方SSL证书,并且只能为您的客户端证书使用自签名。]

然后,你将你的网站配置为接受客户端证书-通常我会使用appcmd.exe和启动任务,但正如博客文章所指出的,你的网站还没有准备好,所以你需要将其添加到你的网络角色OnStart方法中[实际上,我一开始走的是appcmd.exe路径,非常困惑]。

using (var serverManager = new ServerManager())
{
   try
   {
       var siteName = RoleEnvironment.CurrentRoleInstance.Id + "_Web";
       var config = serverManager.GetApplicationHostConfiguration();
       var accessSection = config.GetSection("system.webServer/security/access", siteName);
       accessSection["sslFlags"] = @"SslNegotiateCert";
       serverManager.CommitChanges();
   }
   catch (Exception ex)
   {
        ...
   }
}

CertificateAuthHandler中,您可以验证证书,如果您希望(我建议您)发送的客户端证书来自您期望的CA(如果是自签名的),或者证书的指纹是您期望的指纹(如果只有一个),或者以上两者的组合。

最新更新