Problemas al desplegar el Stamper - Self signed cert

Buenas, estamos queriendo desplegar el Stamper en SUDOCU pero estamos teniendo algunos inconvenientes con el paso del certificado. Básicamente probamos la guía que esta linkeada en el tutorial 1, cambiando la parte del CN y DNS por “stamper” (que entendemos es el nombre con el que se publica en la infraestructura).

El certificado p12 se genera bien (pasos 3.3 y 3.4 de 1), y luego hacemos los pasos de la documentación:

  • Descomentar las variables de entorno
  • Descomentar el servicio llamado stamper
  • Descomentar la config llamada docs_stamper_config
  • Descomentar el secret docs_stamper_keystore

Ademas también descomentamos las lineas siguientes


resource.protocol=file
resource.base=/app/classes/config

Que ya fueron comentadas anteriormente en otra parte de este foro 3.

La cuestión que cuando re-desplegamos nuevamente el stack, obtenemos el log del contenedor:


root@portal:~/expedientes/prod/arai# docker service logs docs_stamper -f

El log va como adjunto porque el foro me dice que excede la cantidad de caracteres permitidos (?), pero dejo el TL;DR:


...
docs_stamper.1.ntjrjw2mlws0@portal    | 2021-12-16 18:41:27.975  INFO 1 --- [           main] a.c.n.n.e.service.ResourceManager        : file:/app/classes/config/keystore.p12
docs_stamper.1.ntjrjw2mlws0@portal    | java.security.cert.CertificateException: Self-signed certificates not supported
docs_stamper.1.ntjrjw2mlws0@portal    |         at ar.com.nomi.necro.estampatodo.service.KeystoreService.init(KeystoreService.java:47)
docs_stamper.1.ntjrjw2mlws0@portal    |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
docs_stamper.1.ntjrjw2mlws0@portal    |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
...

Me metí al contenedor y le hice md5sum /app/classes/config/keystore.p12 y es exactamente el mismo que generamos en los pasos anteriores.

Otra prueba que hicimos es generar un pkcs12 a partir de un certificado válido de Let’s Encrypt. Básicamente seguimos los pasos descritos en este comentario 2. Hicimos todos los pasos necesarios (borrar el stack, borrar el secret, levantar todo nuevamente).

Obtuvimos exactamente el mismo mensaje. Googleamos el mismo y no encontramos resultados. Ahí nuestra sospecha derivo en que es algo particular del stamper y que tal vez sea un mensaje que captura algo medio genérico y nos esta faltando alguna configuración.

Quedo a disposición por cualquier info adicional que consideren que puede aportar.


logs_docs_stamper.log.txt (26.2 KB)

Lo vamos a ver, normalmente si se siguen los pasos para generar el keystore.p12
https://pki-tutorial.readthedocs.io/en/latest/simple/index.html
de ahi se hacen el punto 1 completo, el punto 2 completo, y los puntos 3.1 y 3.2
y despues saltar al 4.4

…los mantenemos al tanto por esta vía.

Estamos de acuerdo con los puntos 1, 2 y 4.4. Pero en el caso de 3, nosotros hicimos solamente 3.3 y 3.4 (como describo en el mensaje original), no 3.1 ni 3.2. Entendíamos que el stamper era un servidor, no un “mail”. Vos me confirmas que hay que hacer los pasos usando 3.1 y 3.2, no 3.3 y 3.4?

Rehice todos los pasos pero ahora haciendo los pasos 3.1 y 3.2 como me pones, sigo obteniendo el mismo mensaje de error de Java:


docs_stamper.1.r1zhljrfrf1k@portal    |                                                                                                                                   
docs_stamper.1.r1zhljrfrf1k@portal    |   .   ____          _            __ _ _                                                                                           
docs_stamper.1.r1zhljrfrf1k@portal    |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \                                                                                          
docs_stamper.1.r1zhljrfrf1k@portal    | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \                                                                                         
docs_stamper.1.r1zhljrfrf1k@portal    |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )                                                                                        
docs_stamper.1.r1zhljrfrf1k@portal    |   '  |____| .__|_| |_|_| |_\__, | / / / /                                                                                         
docs_stamper.1.r1zhljrfrf1k@portal    |  =========|_|==============|___/=/_/_/_/                                                                                          
docs_stamper.1.r1zhljrfrf1k@portal    |  :: Spring Boot ::        (v2.2.2.RELEASE)                                                                                        
docs_stamper.1.r1zhljrfrf1k@portal    |                                                                                                                                   
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:48:38.291  INFO 1 --- [           main] a.c.nomi.necro.estampatodo.Application   : Starting Application on ee368ef96
fa3 with PID 1 (/app/classes started by root in /app/classes)                                                                                                             
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:48:38.298  INFO 1 --- [           main] a.c.nomi.necro.estampatodo.Application   : No active profile set, falling back to default profiles: default                                                                                                                                           
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:49:08.196  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 
8080 (http)
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:49:08.398  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:49:08.488  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache 
Tomcat/9.0.29]
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:49:10.294  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebA
pplicationContext
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:49:10.294  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initi
alization completed in 30802 ms
docs_stamper.1.r1zhljrfrf1k@portal    | 2022-01-06 13:49:19.893  INFO 1 --- [           main] a.c.n.n.e.service.ResourceManager        : file:/app/classes/config/keystore
.p12
docs_stamper.1.r1zhljrfrf1k@portal    | java.security.cert.CertificateException: Self-signed certificates not supported
docs_stamper.1.r1zhljrfrf1k@portal    |         at ar.com.nomi.necro.estampatodo.service.KeystoreService.init(KeystoreService.java:47)
docs_stamper.1.r1zhljrfrf1k@portal    |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
docs_stamper.1.r1zhljrfrf1k@portal    |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
docs_stamper.1.r1zhljrfrf1k@portal    |         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
docs_stamper.1.r1zhljrfrf1k@portal    |         at java.base/java.lang.reflect.Method.invoke(Method.java:567)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroy
AnnotationBeanPostProcessor.java:389)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods
(InitDestroyAnnotationBeanPostProcessor.java:333)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(Ini
tDestroyAnnotationBeanPostProcessor.java:157)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitializatio
n(AbstractAutowireCapableBeanFactory.java:416)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBean
Factory.java:1788)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFa
ctory.java:595)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFact
ory.java:517)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:2
22)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.jav
a:1287)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:
1207)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(Autowire
dAnnotationBeanPostProcessor.java:640)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnota
tionBeanPostProcessor.java:399)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFa
ctory.java:1422)
docs_stamper.1.r1zhljrfrf1k@portal    |         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFa
ctory.java:594)

....
(mas errores Java)

Mirando el tutorial de 1, ¿puede ser que le estemos pifiando en el cn, el dn, el commonName o alguno de los parámetros respecto a lo que espera SpringBoot?
La verdad es que tratamos de armar los conf del tutorial como mejor nos salio pero tampoco es que queda tan claro cual de esos valores importan y cuales no.

Buenos dias! que tal Tomàs?

Hemos realizado la configuraciòn del stamper tanto en ambientes de testing como hace pocos dias en el productivo, con algunos problemas en el camino, pero han quedado bien y estaǹ funcionando correctamente.

Los pasos que hemos realizado del enlace https://pki-tutorial.readthedocs.io/en/latest/simple/index.html, han sido los siguientes: 1.1, 1.2, 1.3 y 1.4, luego; 2.1, 2.2, 2.3 y 2.4, despuès 3.1 y 3.2 (no se hacen ni 3.3 ni 3.4) y finalmente el 4.4 (donde se genera el p12).

Si luego de hacer los pasos que te pasè seguis con problemas, te puedo enviar por correo la documentaciòn que hicimos de los pasos y las captura de pantalla de cada uno de ellos.

Saludos!
NOTA. me caiste bien porque veo que sos de los que piensan que los Halcones galàcticos fue de los mejores dibujitos que existieron jajaja (por tu foto de perfil)

Ariel, gracias por tu respuesta. Van algunos comentarios y dudas.

Perfecto. Igual ante la duda, rehíce todo haciendo esa secuencia de pasos que planteas, obteniendo el mismo error que reporté.

Con esto que me decís, asumo que tenemos algún problema local. Mas allá de eso, una documentación extra y capturas creo que me pueden servir para comparar, así que te agradezco si me la pasas. Puede ser por acá o mi correo es “tdelvechio unlu edu ar”.

Sobre todo en la parte de generar las bases de datos de la RootCA que es un proceso que nunca había hecho de esa manera, y capaz me comí algún warning/error (confieso igualmente que lo hice varias veces desde cero sin ver errores)

Jajaja, y no cualquier halcón, el niño de cobre, porque uno no deja nunca de ser un aprendiz (sobre todo en sistemas)

Antes que nada, gracias Ariel por el documento que me pasaste. Básicamente son los pasos pero con los valores que ustedes pusieron en los comandos y archivos conf. Igualmente probé guiándome por dicho doc y llego al mismo error que inicio este hilo.

Probé mirar el digest de la imagen del server en comparación con la que se encuentre en Docker Hub, y ambas coinciden. Igualmente por las dudas probé eliminar dicha imagen y crear el servicio nuevamente, teniendo idéntico resultado.

Si alguien pudiera tirar algún tip para debugguear la imagen, se agradece (el container se muere porque no puede iniciar el servicio, entonces es imposible loguearse y mirar tranquilo los archivos y demas, da una ventana de 15 segundos aprox).

Hola perdón por no seguir con este hilo.
Lo que podes hacer para descartar que no sea el keystore que generaste, es probar con el keystore que viene por defecto y que esta acá
https://gitlab.ungs.edu.ar/sudocu/sudocu/sudocu-estampador/-/blob/master/src/main/resources/desa.p12
(si no tenes acceso pasame un email y te lo mando)

Entonces el docs_stamper.env te queda así:

ARAI_DOCS_STAMPER_KEYSTORE=desa.p12
ARAI_DOCS_STAMPER_KEYSTORE_PASS=1234
ARAI_DOCS_STAMPER_KEYSTORE_ALIAS=desa
ARAI_DOCS_STAMPER_LOGO=firma.png

y generas el secret con desa.p12.

Descartando eso después tener en cuenta los siguientes tips:

  1. en application.properties https://hub.siu.edu.ar/siu/expedientes/-/blob/develop/prod/arai/application.properties
    des-comentar las siguientes lineas
    #resource.protocol=file
    #resource.base=/app/classes/config

  2. en docs.yml en la docu https://expedientes.siu.edu.ar/docs/arai/#reemplazar-logo-por-defecto en las lineas
    configs:

    • source: docs_stamper_logo
      target: /app/resources/firma.png
      cambiar por
      configs:
    • source: docs_stamper_logo
      target: /app/classes/config/firma.png
  3. En docs_stamper.env estas lineas no hay que cambiar:
    ARAI_DOCS_STAMPER_KEYSTORE=keystore.p12
    ARAI_DOCS_STAMPER_LOGO=firma.png

  4. cuando pases a producción para tener bien el kesytore.p12 en la docs de PKI antes de hacer todos los pasos, debes modificar root-ca.conf y signing-ca.conf poniendo los datos de tu universidad acá
    [ ca_dn ]
    0.domainComponent = “ar”
    1.domainComponent = “edu”
    2.domainComponent = “universidad”
    organizationName = “Universidad”
    organizationalUnitName = “Universidad”
    commonName = “Universidad”

y entonces en el paso 3.1 poner los datos que pusiste aqui…pues deben coincidir.

  1. Luego queda modificar la hora siguiendo esta doc https://sudocu.dev/docs/documentacion-tecnica/faq-tecnico/#instalar-tzdata-en-imagen-de-estampador-para-corregir-fecha-y-hora

Si seguís con problemas solicita un meet con Facundo Cusato o Alejandro Corsaro.

Saludos

Mi mail es tdelvechio@unlu.edu.ar, probé y no tengo acceso a ese Gitlab. Me podes pasar ese archivo desa.p12???

Gracias.

Buenas, nos conectamos y pudimos ver que el problema estaba en el certificado, al probar con el desa.p12, el stamper levantó sin problemas.
Tomás, fiajte si podés generar el certificado de nuevo para que funciones, cualquier cosa avisanos.

Saludos

Facundo, si, hoy hicimos pruebas sobre el Sistema y efectivamente quedo funcionando perfecto.

Dejo el compromiso de postear por acá la generación de un certificado paso a paso en estos días (si lo puedo hacer funcionar, je) y los ejemplos de los archivos de configuración (Sería una copia de los ejemplos del tutorial pero con datos de una Univ Nacional, ya que parecería que el problema esta en los valores de los campos en los archivos conf)

Hola! Estoy con el mismo problema… pese a haber seguido todas las indicaciones que fueron poniendo en este post y con varias pruebas, el stamper sigue tirando:

java.security.cert.CertificateException: Self-signed certificates not supported

¿podran indicar como lo solucionaron?

Desde ya gracias!

Escribime a tdelvechio unlu.edu.ar y te doy una mano.

Hola,
Estamos teniendo el mismo problema, error por el certificado autofirmado, hemos realizado distintas pruebas con los pasos que hemos encontrado acá y seguimos con el error.

También hemos probado distintas combinaciones en los archivos .conf (dejando igual los DC, dejando igual o cambiando los organizationName, lo mismo con los demás parámetros, poniendo lo mismo o variando los datos en el paso 3.1) pero seguimos igual.

  • Clon del repo.
  • Configuramos los .conf.
  • Hacemos 1.1, 1.2, 1.3, 1.4, 2.1, 2.2, 2.3, 2.4, 3.1, 3.2 y 4.4.
  • Copiamos el p12 generado al repo del proyecto nuestro, renombramos a keystore.p12, eliminamos el stack, eliminamos el secreto, volvemos a levantar y sigue el error.

Estaremos haciendo algún paso de más o de menos, o saben si hay algún lugar donde haya más información al respecto a ver qué puede estar pasando?

Mientras tanto en la versión de pruebas están las áreas de la universidad probando, ahí está el archivo desa.p12 y todo funciona ok pero en producción queremos generar uno propio.

Gracias!

Buenas!!

Estuve teniendo este inconveniente al integrar stamper, y veo que mas arriba se repetia el inconveniente.
El log es el siguiente

docs_stamper.1.udouf3dxjyrr@eei-dev | 2023-05-05 15:25:25.270 WARN 1 — [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘signatureController’: Unsatisfied dependency expressed through field ‘signService’; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘signService’: Unsatisfied dependency expressed through field ‘keystoreService’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘keystoreService’: Invocation of init method failed; nested exception is java.lang.RuntimeException: java.security.cert.CertificateException: Self-signed certificates not supported

La solucion a mi inconveniente fue la siguiente,
Igualar los 3 archivos de configuracion

root-ca.conf
[ ca_dn ]
commonName = “Universidad ***”

signing-ca.conf
[ ca_dn ]
commonName = “Universidad ***”

email.conf
[ email_dn ]
commonName = “Universidad ***”

Los demas campos tambien tienen que ser iguales, pero menciono estos ya que fue el causal de mi problema…

ADEMAS, en el archivo de variables del stamper docs_stamper.env
ARAI_DOCS_STAMPER_KEYSTORE_ALIAS=KeyStamper

En el alias, recordar poner el mismo valor que al ejecutar el siguiente comando
openssl pkcs12 -export
-name “KeyStamper
-inkey certs/stamper.key
-in certs/stamper.crt
-out certs/keystore_stamper.p12

Espero que sea de ayuda para la comunidad, y agradezco a Tomas Delvechio de la UNLU por el por el apoyo brindado.

Saludos.-