Próbuję go uzyskać serwer i klient WCF wzajemnie uwierzytelniać się przy użyciu certyfikatów SSL na poziomie transportu przy użyciu BasicHttpBinding. Oto jak serwer jest coraz stworzył:BasicHttpBinding z uwierzytelnieniem certyfikatu - błąd "zabroniony"?
var soapBinding = new BasicHttpBinding() { Namespace = "http://test.com" };
soapBinding.Security.Mode = BasicHttpSecurityMode.Transport;
soapBinding.Security.Transport.ClientCredentialType =
HttpClientCredentialType.Certificate;
var sh = new ServiceHost(typeof(Service1), uri);
sh.AddServiceEndpoint(typeof(IService1), soapBinding, "");
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindBySubjectName, "localhost");
sh.Open();
Oto klient:
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
var service = new ServiceReference2.Service1Client(binding,
new EndpointAddress("https://localhost:801/Service1"));
service.ClientCredentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindBySubjectName, "localhost");
service.ClientCredentials.ServiceCertificate.Authentication.
CertificateValidationMode =
System.ServiceModel.Security.X509CertificateValidationMode.PeerTrust;
service.HelloWorld();
Certyfikat dla localhost jest w osobistym, zaufanego głównego i zaufanym pojemników 3rd party. Internet Explorer może połączyć się z hostem i zobaczyć WSDL. Również połączenia SSL działa dobrze z ClientCredentialType = HttpClientCredentialType.None
HelloWorld() nie powiedzie się z:
System.ServiceModel.Security.MessageSecurityException occurred<br/>
Message="The HTTP request was forbidden with client authentication
scheme 'Anonymous'."
który jest rethrown wyjątek od: "Zdalny serwer zwrócił błąd:. (403) Zakazane"
Jak można się obejść, zastanawiając się, co dzieje się z wtf?
Nie mogę uwierzyć, że to było takie proste, a ja go nie złapać :( – galets
Mam ten sam problem, ale gdzie app.config posiada: <= transportu clientCredentialType "Certificate" proxyCredentialType = "None" realm = ""> w elemencie transportowym :-( – Ronnie
Próbuję rozwiązać podobny problem - po prostu wypróbowałem twój kod, ale "dodaj odniesienie do usługi" nie działało na kliencie . Nie sądzę, żebyś mógł dołączyć całe rozwiązanie? – user1229458