2010-06-09 32 views
15

Estoy tratando de configurar un WCF servidor \ cliente para trabajar con SSLLa petición HTTP estaba prohibido con el esquema de autenticación de cliente 'Anónimo'

tengo la siguiente excepción:

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

Tengo un auto servidor WCF alojado He corrido hhtpcfg tanto mis certificados de cliente y servidor se almacenan en personal y personas de confianza en la máquina local

Aquí está el código del servidor: Código

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; 

Al mirar web_tracelog.svclog y trace.log , se revela que el servidor no puede autorizar el certificado del cliente Mi certificado no está firmado por un Autorizado CA pero esta es la razón por la que los agregué a la gente de confianza ....

¿Qué me falta? ¿Qué me estoy perdiendo?

Respuesta

7

El truco era hacer que el certificado de cliente válido,

Para hacer eso tienes dos opciones:

1) hacen que sea firmado uno mismo y luego se pone debajo de la "Autoridad de certificación raíz de confianza".

Obviamente en producción, desea que su certificado de cliente sea firmado por una CA de confianza y no autofirmado. ver http://msdn.microsoft.com/en-us/library/ms733813.aspx

2) firmar su certificado de cliente por otro certificado que ha creado (vamos a llamarlo MiCA) y poner MiCA en la "Autoridad de certificación raíz de confianza" y tienen el certificado de cliente en las "personas de confianza". De esta forma, su entorno de desarrollo está incluso más cerca de la implementación.

Cómo crear y firmar los certificados: mirar debajo de http://msdn.microsoft.com/en-us/library/bfsktky3.aspx

Aquí está la serie de comandos que utilicé:

1) makecert -r -pe -SS Mi -sr LocalMachine -a sha1 - intercambio de cielo -n cn = MyCA -sv "MyCAPrivate.pvk"

2) makecert -pe -ss Mi -sr LocalMachine -a sha1 -sky exchange -n cn = SignedClientCertificate -iv "MyCAPrivate.pvk" -ic " MyCAPublic.cer "

+1

el segundo comando falla con Error: No se puede cargar el certificado del emisor ('MyCAPublic.cer') – TDaver

1

The reas en la que estaba recibiendo este error se debía a que en mi webconfig, los servicios web tenido la URL de http://localhost/myservicename.svc y en nuestro servidor dev tuvimos un FQDN http://dev.myname.com/myservicename.svc.

doble revisar sus web.configs para asegurar las direcciones URL para los servicios web están apuntando a la ubicación correcta.

Cuestiones relacionadas