Necesito iniciar sesión si falla un protocolo de enlace SSL mientras un cliente REST intenta conectarse a mi aplicación. La aplicación se crea con Spring Boot y Java 8 y se implementa en Tomcat 8.
En el caso de que falle el protocolo de enlace SSL, dado que la conexión TLS está interrumpida, es posible que el requisito de registro deba realizarse en la capa de Tomcat o en Java, ya que, en mi caso, Tomcat utiliza JVM subyacente para la validación del certificado SSL.
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="keyStore-1.jks" keystorePass="password" keystoreType="jks" truststoreFile="TrustStore.jks" truststorePass="passwrd" truststoreType="jks" clientAuth="want" sslProtocol="TLSv1.2" />Soy consciente de habilitar el registro de nivel de depuración.
-Djavax.net.debug=ssl
Pero esto registra mucha información y ralentizará el proceso. Y registre también las validaciones SSL exitosas. ¿Hay alguna manera de habilitar los casos de falla solos con registros mínimos a nivel de Java o Tomcat?
NO estoy viendo esto desde una perspectiva de depuración, ya que los registros de depuración de SSL son muy buenos para eso. Este requisito tiene más un propósito de registro y auditoría y habilitar los registros de depuración no es una opción factible. Un mecanismo que registra solo los errores que ocurren en SSL y no todos los datos hexadecimales/certificados.
Desafortunadamente, no es posible probable. Y no está relacionado con Tomcat. El registro de SSL no forma parte del registro estándar en su aplicación. Puede intentar reducir la salida con la siguiente opción:
-Djava.net.debug=handshakeAlgunos otros:
Ver documentos .
Si realmente necesita esto y el rendimiento es fundamental para su aplicación, puede instrumentar SSLSocket (en los documentos puede leer sobre el proceso de negociación) con ASM / Btrace /etc y verificar el estado de la negociación dentro de él. Pero en ese caso, no tendría información de depuración, solo verdadero/falso.
Consulte también los documentos de Tomcat con todas las configuraciones disponibles. Allí puede leer que existe la clase JSSEImplementation , que se usa en Tomcat. Y es contenedor para JSSE.
Tuve el mismo problema muchas veces y lo resolví de la siguiente manera. Tuve la configuración de mi proyecto en intelliJ.
*** Solicitud de certificado Tipos de certificado: RSA, DSS, ECDSA Algoritmos de firma compatibles: SHA512 con RSA, Desconocido (hash: 0x6, firma: 0x2), SHA512 con ECDSA, SHA384 con RSA, Desconocido (hash: 0x5, firma: 0x2), SHA384 con ECDSA, SHA256 con RSA, Desconocido ( hash:0x4, firma:0x2), SHA256withECDSA, SHA224withRSA, Desconocido (hash:0x3, firma:0x2), SHA224withECDSA, SHA1withRSA, SHA1withDSA, SHA1withECDSA Autoridades de certificación:
CN=Symantec Public Class 3, O=Symantec Corporation, C=US
CN=Symantec Class 3 Manage, OU=Red de confianza de Symantec, O=Symantec, C=US
[leer] hashes MD5 y SHA1: len = 302
Solución: agregue los certificados faltantes (para nuestro ejemplo, dos certificados CN=Symantec Public Class 3 y CN=Symantec Class 3 Manage).
tenemos que entender las llamadas entre el servidor y el cliente por el protocolo SSL, consulte el siguiente enlace para obtener más información sobre cómo se comunican el servidor y el cliente.
https://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#InstallProbs
Daré una demostración de video de YouTube si alguien tiene un problema.
Espero que esta solución ayude a alguien.
Gracias.