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

Я пытаюсь настроить WCF server\client для работы с 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 показывает, что сервер не может autheticate клиент сертифицировать Мой сертификат, не подписываются Авторизованным CA, но это - то, почему я добавил их к Доверяемым Людям....

Что я пропускаю? Что я пропускаю?

15
задан Iswanto San 7 March 2013 в 03:54
поделиться

1 ответ

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

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

1) сделать его самоподписанным и затем поместить его под "Trusted Root Certification Authority".

Очевидно, что в производстве вы хотите, чтобы ваш клиентский сертификат был подписан доверенным центром сертификации, а не самоподписанным. см. 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 -sr LocalMachine -a sha1 -sky exchange -n cn=SignedClientCertificate -iv "MyCAPrivate.pvk" -ic "MyCAPublic.cer"

7
ответ дан 1 December 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: