WCF новичок - как установить и использовать сертификат SSL? - PullRequest
0 голосов
/ 02 января 2011

Это должно быть несложно для тех, кто делал это раньше ...

Я пытаюсь настроить службу WCF с собственным размещением, используя NetTcpBinding.Я получил пробный SSL-сертификат от Thawte и успешно установил его в своем хранилище 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()

Добавлена ​​награда Я только что получил новый пробный сертификат от Thawte, установил его с установленным параметром "Кому выдан" на mydomain.comи я все еще получаю сообщение об ошибке выше. Я новичок в веб-безопасности, поэтому мне понадобятся подробные инструкции, как заставить клиента подключиться к моему веб-сайту и принять сертификат безопасности. (Кстати, что означает "Нет"заверения "значат?)

Ответы [ 4 ]

3 голосов
/ 21 февраля 2011

Кажется, проблема в том, что сертификат сервера, установленный на вашем сервере, не является доверенным клиентом.

Для того, чтобы ему доверяли, сертификат корневого ЦС сертификата сервера должен находиться в "Trusted Root Certification Authorities "хранилище пользователя, на котором запущен клиент.Если вы получите сертификат сервера «производственного» уровня от Thawte или какого-либо другого аналогичного центра сертификации, ему уже будет доверять большинство машин в мире.

Однако, судя по сообщению об ошибке (где отличительное имя субъекта сертификата содержит «OU = Только для целей тестирования. Нет гарантий.») Ваш сертификат является тестовым сертификатом, и поэтому вам необходимо добавить CAСертификат для вашего магазина "Trusted Root Certification Authorities" вручную.Корневой сертификат обычно можно загрузить с веб-сайта CA (Thawte в вашем случае).

3 голосов
/ 02 января 2011

Если сертификат предназначен для ssl.mydomain.com, вам необходимо получить доступ к серверу по этому адресу.Похоже, что вы пытаетесь получить доступ к нему через localhost, что, очевидно, не то же самое.

1 голос
/ 21 февраля 2011

Проблема в том, что издателю вашего сертификата не доверяют.

WCF попытается проверить цепочку сертификатов.Одно из решений заключается в том, чтобы убедиться, что сертификат, используемый для выпуска того, который у вас есть, хранится в хранилище доверенных издателей сервера.

Вы также можете добавить настраиваемую политику сертификатов, чтобы обойти проверку в вашей среде разработки (как описано выше) здесь )

Вы также можете поместить свой сертификат в хранилище «Надежные люди» и установить для свойства certificateValidation значение ChainOrPeerTrust.Это попытается проверить всю цепочку, если вы не поместите сертификат в хранилище «Надежные люди».Это позволит вам оставить конфигурацию и код без изменений для развертывания в рабочей среде.Вы просто положите свой сертификат в магазин «Надежные люди» в вашей среде разработки.

0 голосов
/ 17 апреля 2018

в .net core 2.0 мы должны сделать это из поиска менеджера пакетов nuget для System.ServiceMode, который вы можете использовать System.ServiceModel.primitives.

обновлено по состоянию на апрель 2018 года

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...