2010-06-09 11 views
15

Sto cercando di configurare un WCF server \ client per lavorare con SSLLa richiesta HTTP è stato proibito con lo schema di autenticazione client 'Anonimo'

ottengo la seguente eccezione:

The HTTP request was forbidden with client authentication scheme 'Anonymous'

Ho un auto server WCF ospitato. Ho eseguito hhtpcfg sia i miei client e server certificati vengono memorizzati in Personale e Persone attendibili sulla macchina locale

Ecco il codice del server: Codice

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); 

Cliente:

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; 

Guardando a web_tracelog.svclog e trace.log rivela che il server non può autenticare il certificato client Il mio certificato non è firmato da un Autorizzato CA ma questo è il motivo per cui li ho aggiunti al Trusted People ....

Cosa mi manca? Cosa mi manca?

risposta

7

Il trucco è stato quello di rendere il certificato client valido,

Per fare questo si hanno due possibilità:

1) lo rendono autonomo firmato e poi metterlo sotto la "certificazione fonti attendibili Autorità".

Ovviamente nella produzione si desidera che il certificato del client sia firmato da una CA attendibile e non autofirmato. vedere http://msdn.microsoft.com/en-us/library/ms733813.aspx

2) firmare il certificato client da un altro certificato è stato creato (chiamiamolo Myca) e mettere Myca nel "un'autorità di certificazione attendibile Root" e hanno il certificato client nelle "persone di fiducia". In questo modo il tuo ambiente di sviluppo è ancora più vicino alla distribuzione.

come creare e firmare i certificati: Guardate sotto http://msdn.microsoft.com/en-us/library/bfsktky3.aspx

Ecco la serie di comandi che ho usato:

1) makecert -r -pe -ss mio -sr LocalMachine -a sha1 - scambio cielo -n CN = Myca -sv "MyCAPrivate.pvk"

2) makecert -pe -ss mio -sr LocalMachine -a SHA1 scambio-sky -n CN = SignedClientCertificate -IV "MyCAPrivate.pvk" -ic " MyCAPublic.cer "

+1

il secondo comando non riesce con Errore: Impossibile caricare il certificato di emittente ('MyCAPublic.cer') – TDaver

1

The reas su che stavo ricevendo questo errore è stato perché nel mio WebConfig, i servizi web avuto l'URL del http://localhost/myservicename.svc e sul nostro server dev abbiamo avuto un nome di dominio completo http://dev.myname.com/myservicename.svc.

doppio controllare i web.configs per garantire gli URL ai servizi web sono di puntamento nella posizione corretta.

Problemi correlati