HTTP-запрос был запрещен в схеме аутентификации клиента «Аноним» - PullRequest
15 голосов
/ 09 июня 2010

Я пытаюсь настроить сервер \ клиент WCF для работы с SSL

Я получаю следующее исключение:

HTTP-запрос был запрещен в схеме аутентификации клиента 'Anonymous'

У меня есть собственный сервер WCF. Я бегал hhtpcfg мои клиентские и серверные сертификаты хранятся в разделе Личные и доверенные лица на локальном компьютере

Вот код сервера:

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
binding.Security.Mode = WebHttpSecurityMode.Transport;
_host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust;
_host.Credentials.ClientCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
_host.Credentials.ClientCertificate.Authentication.TrustedStoreLocation = StoreLocation.LocalMachine;
_host.Credentials.ServiceCertificate.SetCertificate("cn=ServerSide", StoreLocation.LocalMachine, StoreName.My);

Код клиента:

binding.Security.Mode = WebHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
WebChannelFactory<ITestClientForServer> cf =
                new WebChannelFactory<ITestClientForServer>(binding, url2Bind);
cf.Credentials.ClientCertificate.SetCertificate("cn=ClientSide", StoreLocation.LocalMachine, StoreName.My);
            ServicePointManager.ServerCertificateValidationCallback
                   += RemoteCertificateValidate;

Просмотр web_tracelog.svclog и trace.log показывает, что сервер не может аутентифицировать сертификат клиента Мой сертификат не подписан авторизованным центром сертификации. но именно поэтому я добавил их в список доверенных людей ...

Чего мне не хватает? Чего мне не хватает?

Ответы [ 2 ]

7 голосов
/ 10 июня 2010

Хитрость заключалась в том, чтобы сделать сертификат клиента действительным,

. Для этого у вас есть два варианта:

1) сделать его самоподписанным, а затем поместить его в «Доверенный корневой центр сертификации».".

Очевидно, что в процессе работы вы бы хотели, чтобы ваш сертификат клиента был подписан доверенным центром сертификации, а не подписан самостоятельно.см. http://msdn.microsoft.com/en-us/library/ms733813.aspx

2) Подпишите ваш клиентский сертификат другим сертификатом, который вы создали (назовем его MyCA), и поместите MyCA в «Trusted Root Certification Authority» и получите сертификат клиента в «Trusted People».Таким образом, ваша среда разработки становится еще ближе к развертыванию.

Как создавать и подписывать сертификаты: см. http://msdn.microsoft.com/en-us/library/bfsktky3.aspx

Вот серия команд, которые я использовал:

1) makecert -r -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n cn = MyCA -sv "MyCAPrivate.pvk"

2) makecert -pe -ss My -srLocalMachine -a sha1 -sky exchange -n cn = SignedClientCertificate -iv "MyCAPrivate.pvk" -ic "MyCAPublic.cer"

1 голос
/ 21 июля 2012

Причина, по которой я получил эту ошибку, заключалась в том, что в моем webconfig веб-сервисы имели URL-адрес http://localhost/myservicename.svc, а на нашем dev-сервере у нас было полное доменное имя http://dev.myname.com/myservicename.svc.

Дважды проверьте ваш web.configsчтобы убедиться, что URL-адреса веб-служб указывают на правильное местоположение.

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