"BasicHttpBinding" mit Zertifikat-Authentifizierung - Fehler "verboten"?
Ich versuche, gehen Sie WCF-client und-server gegenseitig authentifizieren sich gegenseitig mit Hilfe der SSL-Zertifikate auf Transportebene mittels BasicHttpBinding. Hier ist, wie der server wird immer erstellt:
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();
Hier der client:
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();
Zertifikat für "localhost" ist in der Persönlichen, Vertrauenswürdigen Root und Vertrauenswürdigen 3rd-Party-Container. Internet Explorer kann eine Verbindung zu host und siehe WSDL. Auch SSL-Anrufe funktionieren mit ClientCredentialType = HttpClientCredentialType.Keine
HelloWorld() kann nicht mit:
System.ServiceModel.Security.MessageSecurityException occurred<br/>
Message="The HTTP request was forbidden with client authentication
scheme 'Anonymous'."
ist eine Ausnahme erneut ausgelöst, aus: "Der Remoteserver hat einen Fehler zurückgegeben: (403) Verboten."
wie geht man um herauszufinden, wtf ist da Los?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, diese in der client nur nach der Einstellung
Security.Mode
:Wenn Sie standard-generierte proxy-Klasse, die Sie können, um transport-client credential-Typ
Certificate
imApp.Config
:C#