2009-04-23 126 views
6

我有一个客户端/服务器WCF应用程序需要某种用户身份验证对数据库。该应用程序(包括客户端和服务器端)正在开发中,以销售给数十个客户,供他们的内联网使用。我们并不担心加密大部分通过网络传输的数据,当然除了身份验证期间。WCF,安全和证书

考虑到WCF的安全性,我一直回想起我们应该使用x509证书的想法。但是,我们的客户绝对不会想知道任何必须申请,购买和安装这些证书的细节。

我想首先知道在这种情况下实施用户名/密码认证的首选方法是什么。如果它需要使用证书,那么客户是否必须向可信任的CA申请自己的证书,或者我们可以为软件提供商生成证书供客户使用?

真的,我正在寻找一种最佳实践,对我们的客户的摩擦最小。

谢谢!

编辑:我正在使用NetTcpBinding,并且我的服务器作为Windows服务运行。

回答

5

因此,用户名/密码不需要客户端证书,因为我确定您知道,它只需要托管WCF服务的服务器上的HTTPS证书 - 一旦您拥有该证书,您就可以愉快地使用标准用户名/密码认证位(WCF将不允许没有HTTPS的基于消息的认证)。

如果您想降低客户端证书根目录,您将获得不可否认的优势 - 您可以确定发送的机器是它说的那个人(除非有人盗用了证书,一个用户名和密码组合正在散步)。您作为软件提供商可以充当您自己的证书颁发机构并生成您自己的客户机证书(根据您的基础设施,有几种方法可以实现这一点),但是您需要将客户机配置为信任您的根CA.

如果服务器和客户端在域环境中运行,您可以使用transport security with Windows authentication(您正在使用tcp绑定,所以无论如何互操作性都在窗口外!)额外的好处是身份验证是透明的,任何地方都需要任何证书。如果你想验证服务器的身份,那么message security with Windows authentication就可以做到。

+0

谢谢!我忘记提到的是我正在使用NetTcpBinding。另外,请记住,服务器也正在部署给多个客户,这是我关于证书问题的主要来源。 – chris 2009-04-23 22:42:06

+0

确定更新了答案 – blowdart 2009-04-23 22:55:56

1

如果你要跨越防火墙的界限,那么证书将是你最好的解决方案。我不太了解关于申请证书或申请的细节。不幸的是,据我所知,我认为你必须帮助他们申请证书,否则他们必须自己去做,除非他们想在安装自己的证书服务器的过程中进行。如果应用程序是内部的,那么Windows身份验证将起作用并且非常容易,但是如果您认为您的客户端需要跨越防火墙边界使用您的应用程序,那么您不妨花费时间使用证书,因为证书可以在任何地方使用。现在有一种叫做联邦安全的方法,您可以将身份验证的权限委托给另一个实体。我认为这是用来说,如果你有域名,并且你想把别人的域名上的其他域名的许可权限委托给他们的域名,但是它非常复杂,而且我对它的要求非常有限,证书是要走的路。

安全不应该是很容易:)

2

我已经得到了生产项目,这类似于您的方案。我有一个Windows服务托管终端通过netTCPBinding和我使用x509证书...虽然在我的情况下,意图是加密传输层和消息层,因为我正在穿越不可信的安全边界。除了要求证书出现以外,我不太关心提供认证/授权。

与您的内联网场景类似(我假设),我在安装时对服务器和客户端机器拥有权限......或者至少可以规定一些安装条款。

与其购买x509证书并以此费用为客户负担,我选择推出自己的产品。我们将我们的Win2003服务器中的一台设置为CA,颁发我们自己的证书颁发机构证书。然后,我们为服务器生成了x509证书,并为客户端生成了单个x509证书。

客户端和服务器证书已安装在客户端和服务器上(如适用)安装到计算机级别的个人用户存储中。我们还将我们的CA证书直接安装到受信任的根证书颁发机构部分,从而使我们的客户机和服务器证书可信。

因为我不太关心认证/授权,所以我不知道该如何推荐,作为处理绑定证书给个人用户的最佳实践,并且比机器级别更细化(我的解决方案是windows服务到windows服务交流 - 完全无人看管)。我想你会需要每个用户的证书,将它安装到证书MMC中的个人用户存储中。运行时实现将以您如何配置WCF执行cert查找为指导,因此它应该相当容易。

在整个过程中,我非常依赖从CodeProject文章中学到的东西:Securing WCF Services with Certificates。它会引导您生成/安装证书。示例WCF应用程序是IIS托管的,但我能够非常轻松地将配置节从web.config转换为app.config。

就我而言,我公开了Win2003中向Web本身申请证书的Web界面,所以客户可以在将来直接申请证书。我们有审批控制,所以它运作良好。我还没有需要生成新的证书,所以我不能说需要多少摩擦。