Я пытаюсь настроить 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, но это - то, почему я добавил их к Доверяемым Людям....
Что я пропускаю? Что я пропускаю?
Фокус был в том, чтобы сделать сертификат клиента действительным,
Для этого у вас есть два варианта:
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"