none
Leer Certificado .p12 para firmar localmente en web service RRS feed

  • Pregunta

  • Hola  a todos,

    Realice un web service el cual fiirma un documento xml con xades, cuando pruebo el servicio desde mi pc el firmado se hace correctamente, pero cuando publico el web service en otro servidor, me esta dando un error al firmado y la leyenda dice:

    El sistema no puede encontrar el archivo especificado.

    Ya le di permisos a las carpetas donde se encuentran los certificados pero aun asi no logro acceder, la ruta que tengo actualmente en el IIS de mi pc es:

    C:\inetpub\wwwroot\factura\certificados\cert.p12

    y la del otro servidor es exactamente igual

    Lo que hago en el codigo es pasarle la ruta con la instruccion:  string pathCert = Server.MapPath("./Certificados/"); mas el nombre del archivo.

    Les agradezco cualquier ayuda que me puedar.


    Roberto Meneses

    lunes, 21 de mayo de 2018 5:44

Respuestas

  • Entre el Windows 7 y el Windows Server 2012R2 podría haber diferencias en cuanto a cuáles son los proveedores criptográficos soportados, o en cuanto a las credenciales del servicio que accede al fichero. Un truco que puede ser que te aporte información adicional para tratar de localizar el problema es el de capturar la excepción y examinar la traza de pila. Normalmente, en la pila se ven las fucniones internas a las que llamó el constructor del X509Certificate2 que dio el error, y viendo en qué componente interno se produjo el error a veces se tiene una mejor idea de cuál es el problema (por ejemplo, no da igual que el error ocurra en una función de System.IO que abría el archivo, o en una de System.Cryptography wue esté intentando decodificarlo).
    lunes, 21 de mayo de 2018 8:03
    Moderador

Todas las respuestas

  • Usa el debugger (o mete algo de logging si no puedes conectar el debugger al servidor) y examina el valor que te está devolviendo el MapPath("./Certificados/"). Probablemente encuentres que te falta o sobra un nivel de directorios, y se necesita MapPath("./factura/certificados/"), o algo por el estilo. Examinando el valor devuelto suele ser inmediatamente obvio qué es lo que sobra o falta.
    lunes, 21 de mayo de 2018 5:49
    Moderador
  • Hola Alberto,

    De hecho justo pense en eso, asi que lo que hice fue escribir archivos en esa misma carpeta conforme va avanzando la aplicacion, lo que escribi en esos archivos son las variables que uso para llegar a ellos y lo hace sin problema y las rutas son correctas.

    Tal vez sea importante mostrar el codigo de como instancio la lectura del certificado:

    X509Certificate2 certificate = new X509Certificate2(pathCer, pinCer, X509KeyStorageFlags.DefaultKeySet);
            signatureParameters.Signer = new Signer(certificate);

    Gracias.


    Roberto Meneses

    lunes, 21 de mayo de 2018 6:11
  • Perdon, igual creo que debo mencionar que en mi pc tengo win 7 y los servicios los estoy publicando en un windows server 2012 r2.

    Roberto Meneses

    lunes, 21 de mayo de 2018 6:14
  • Entre el Windows 7 y el Windows Server 2012R2 podría haber diferencias en cuanto a cuáles son los proveedores criptográficos soportados, o en cuanto a las credenciales del servicio que accede al fichero. Un truco que puede ser que te aporte información adicional para tratar de localizar el problema es el de capturar la excepción y examinar la traza de pila. Normalmente, en la pila se ven las fucniones internas a las que llamó el constructor del X509Certificate2 que dio el error, y viendo en qué componente interno se produjo el error a veces se tiene una mejor idea de cuál es el problema (por ejemplo, no da igual que el error ocurra en una función de System.IO que abría el archivo, o en una de System.Cryptography wue esté intentando decodificarlo).
    lunes, 21 de mayo de 2018 8:03
    Moderador
  • Hola Alberto,

    Siguiendo tu recomendacion capture el error y efectivamente en la pila estaba el detalle del error, no estaba cargando el perfil del certificado, asumo que este es un pequeño inconveniente de win server ya que en win 7 no me sucedia, para solventar el problema solo hay que modificar un paramentro en el pool de apliaciones en la configuracion avanzada.

    Gracias por tu valiosa ayuda.


    Roberto Meneses

    • Propuesto como respuesta Meru1 lunes, 12 de julio de 2021 12:17
    martes, 29 de mayo de 2018 15:52
  • Hola Roberto, buenas.

    Estoy teniendo un problema similar y tal como decís, lo resolví modificando el pool de la aplicación que tenia problemas cambiando Load User Profile a true (en mi IIS - Windows Server 2012).

    El problema es que ahora debo subir a un hosting en la nube y no tengo control sobre el pool, alguna idea como resolverlo? o recomendar algún hosting que si tenga ese control?

    Muchas gracias de antemano.

    sábado, 18 de julio de 2020 23:46
  • Hola Fabian,

    En realidad ese problema me sucedio en un vps adquirido con go daddy, habia que configurarle un monton de cosas ya que te entregan el SO virgen, pero asumo que un hosting eso debe estar preparado o configurado.

    Quiza deberias optar por una version mas reciente de Win Server para evitar inconvenientes.

    Go Daddy no me parece muy buena opcion, el soporte latino es muy lento en mi experiencia personal.


    Roberto Meneses

    martes, 21 de julio de 2020 0:05
  • No quiero entorpercer el hilo pero necesitaba agradecer a Alberto y Roberto por el tremendo aporte, me solucionaron días de no encontrar la solución. Muchas Gracias
    lunes, 12 de julio de 2021 12:20