WCF新手 - 如何安装和使用SSL证书?

时间:2011-01-02 17:57:47

标签: c# wcf ssl ssl-certificate

对于之前完成此操作的人来说,这应该是一件轻而易举的事。

我正在尝试使用NetTcpBinding设置自托管的WCF服务。我从Thawte那里获得了一个试用版SSL证书,并在我的IIS商店中成功安装了它,我认为我已经在服务中正确设置了它 - 至少我不会例外!

现在,我正在尝试连接客户端(这仍然在我的开发机器上),并且它给了我一个错误,“Message =”X.509证书CN = ssl.mydomain.com,OU =仅用于测试目的。无保证。,OU = IT,O =我的公司,L =我的城镇,S =无,C = IL链建设失败。使用的证书具有无法验证的信任链。替换证书或更改certificateValidationMode。已处理证书链,但终止于信任提供程序不信任的根证书。“

Ooookeeeey ......现在怎么样?

客户端代码(我想在代码中执行此操作,而不是app.config):

var baseAddress = "localhost";
var factory = new DuplexChannelFactory<IMyWCFService>(new InstanceContext(SiteServer.Instance));
factory.Endpoint.Address = new EndpointAddress("net.tcp://{0}:8000/".Fmt(baseAddress));
var binding = new NetTcpBinding(SecurityMode.Message);
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
factory.Endpoint.Binding = binding;
var u = factory.Credentials.UserName;
u.UserName = userName;
u.Password = password;
return factory.CreateChannel()

添加了Bounty 我刚从Thawte获得了一份新的试用证书,并将其安装在mydomain.com的“已发布”设置中,我仍然收到上述错误。我是网络安全的新手,所以我需要详细说明如何让客户连接到我的网站并接受安全证书。 (顺便说一句,“不保证”是什么意思?)

4 个答案:

答案 0 :(得分:3)

如果证书适用于ssl.mydomain.com,则需要访问该地址的服务器。看起来你正试图通过localhost访问它,这显然是不一样的。

答案 1 :(得分:3)

问题似乎是客户端不信任您在服务器上安装的服务器证书。

要使其受信任,服务器证书的根CA证书需要位于运行客户端的用户的“受信任的根证书颁发机构”存储中。如果您从Thawte或其他类似的CA获得“生产”级服务器证书,那么它将受到全球大多数机器的信任。

但是,根据错误消息判断(证书的主题可分辨名称包含“OU =仅用于测试目的。无保证。”)您的证书是测试证书,因此您需要将CA证书添加到您的证书中“受信任的根证书颁发机构”手动存储。根证书通常可以从CA(在您的案例中为Thawte)网站下载。

答案 2 :(得分:1)

问题是证书的颁发者不受信任。

WCF将尝试验证证书链。一种解决方案是确保用于发布您拥有的证书的证书存储在服务器的受信任发行者存储中。

您还可以添加自定义证书策略以绕过开发环境上的验证(如here所述)

您还可以将证书存储在“受信任的人”中,并将certificateValidationMode设置为ChainOrPeerTrust。除非您将证书放入“受信任的人”商店,否则这将尝试验证整个链。这将允许您保持配置和代码不受影响,以便部署到生产环境。您只需将证书放入开发环境中的“受信任人”商店即可。

答案 3 :(得分:0)

<。>在.net core 2.0中,我们必须从nuget包管理器搜索System.ServiceMode 您可以使用System.ServiceModel.primitives。

自2018年4月更新