2009-12-10 18 views
5

Tengo un problema extraño pasando. Estoy tratando de conectarme al servidor de Apple a través de TCP/SSL. Estoy usando un certificado de cliente proporcionado por Apple para notificaciones push. Instalé el certificado en mi servidor (Win2k3) en certificados de raíz de confianza local y en la carpeta de certificados personales locales.Excepción en SslStream.AuthenticateAsClient (El mensaje estaba mal formateado)

Ahora tengo una biblioteca de clases que trata con esa conexión, cuando llamo a esta biblioteca de clase desde una aplicación de consola que se ejecuta desde el servidor funciona absolutamente bien, pero cuando llamo a esa biblioteca de clase desde una página asp.net o asmx servicio web obtengo la siguiente excepción.

Falló la llamada a SSPI, consulte la excepción interna. El mensaje recibido fue inesperado o mal formateado.

Este es mi código:

X509Certificate cert = new X509Certificate(certificateLocation, certificatePassword);      
X509CertificateCollection certCollection = new X509CertificateCollection(new X509Certificate[1] { cert }); 
// OPEN the new SSL Stream 
SslStream ssl = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);      
ssl.AuthenticateAsClient(ipAddress, certCollection, SslProtocols.Default, false); 

ssl.AuthenticateAsClient es donde el error se tira.

Esto me está volviendo loco. Si la aplicación de la consola se puede conectar bien, debe haber algún problema con la seguridad de la capa de red asp.net que está fallando la autenticación ... no estoy seguro, quizás necesite agregar algo o algún tipo de política de seguridad en el web.config. También solo para señalar que puedo conectar bien en mi máquina de desarrollo local tanto con la consola como con el sitio web.

¿Alguien tiene alguna idea?

+1

Hola, estoy enfrentando el mismo problema ahora. ¿Cómo resolviste el problema? Por favor ayuda – ramesh

Respuesta

1

ASP.NET se ejecuta en una cuenta diferente, por lo que debe utilizar la herramienta WinHttpCertCfg.exe para permitir que la siguiente cuenta acceda al certificado que debe instalar en las carpetas Personal/Trusted del equipo local.

  • ASPNET
  • servicio de red
  • usuarios autenticados

por ejemplo,

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "CertificateName" -a "ASPNET" 

donde nombre del certificado es el nombre descriptivo de su certificado. Puede obtener la herramienta y la información en here.

2

¿Has instalado el certificado en tu sistema? Si está ejecutando Windows, debe estar en la Computadora local/Carpetas personales o de confianza en la Consola de administración (Ejecutar -> mmc).

-2

cambio X509Certificate a X509Certificate2 y también X509CertificateCollection a X509Certificate2Collection

+0

-1 - esto no hace ninguna diferencia en absoluto. –

0

tenía este mismo problema - la adición al usuario ASP.NET Servicio DefaultAppPool/Red no me ayudará sin embargo.

Finalmente descubrí que el servicio web ASP.NET no podía acceder al certificado cuando estaba en la carpeta Certificados de raíz de confianza (aunque la aplicación de la consola sí). Lo arrastré de vuelta a la carpeta Certificados personales y ahora puedo llamar al método desde la consola y las aplicaciones web.

Cuestiones relacionadas