繁体   English   中英

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

[英]WCF newbie - how to install and use a SSL certificate?

对于以前做过的任何人来说,这应该都是个好方法...

我正在尝试使用NetTcpBinding设置自托管WCF服务。 我从Thawte获得了试用SSL证书,并成功将其安装在IIS存储中,而且我认为我已经在服务中正确设置了它-至少我也不例外!

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

噢...现在呢?

客户端代码(我想在代码中执行此操作,而不是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()

添加了赏金,我刚刚从Thawte获得了新的试用证书,并在“ issued to”设置为mydomain.com的情况下安装了该证书,但仍然出现上述错误。 我是网络安全的新手,因此我需要详细的说明,说明如何使客户端连接到我的网站并接受安全证书。 (顺便说一句,“无保证”是什么意思?)

如果证书用于ssl.mydomain.com,则需要按该地址访问服务器。 似乎您正在尝试通过localhost进行访问,这显然是不一样的。

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

为了使其受到信任,服务器证书的根CA证书必须位于运行客户端的用户的“受信任的根证书颁发机构”存储中。 如果您从Thawte或其他类似的CA获得“生产”级别的服务器证书,则世界上大多数计算机将已经信任该证书。

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

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

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

你也可以添加你的开发ENV自定义证书策略绕过验证(如解释在这里

您也可以将证书放入存储的“受信任的人”中,并将certificateValidationMode设置为ChainOrPeerTrust。 除非您将证书放入“受信任的人”商店,否则这将尝试验证完整的链。 这将使您无需更改配置和代码即可将其部署到生产环境。 您只需将证书放在开发环境中的“受信任的人”商店中。

在.net core 2.0中,我们必须从nuget包管理器搜索System.ServiceMode来执行此操作,然后才能使用System.ServiceModel.primitives。

于2018年4月更新

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM