The error message on invalid public keys is not clear.
moved from Jira : https://project.squashtest.org/browse/SQUASH-4348
When an invalid (for any reason) key file is setup for a java microservice, the error message is as below.
This message results from a silent fail (the PEM parser components silently fail to load the pulic key and return null), resulting in a technical failure message. Moreover, this message does not give the name of the culprit key file.
The failure should be detected and the thrown exception should give the key file name in its message.
2021-09-09 07:28:25.708 ERROR 29 — [.0-10087-exec-6] .c.C.[.[.[.[.s.t.r.r.i.c.EndpointConfig] : Servlet.service() for servlet [org.squashtest.tf2.ranorex.report.interpreter.config.EndpointConfig] in context with path [] threw exception
org.bouncycastle.openssl.PEMException: unable to convert key pair: null at org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter.getPublicKey(Unknown Source) ~[bcpkix-fips-1.0.4.jar!/:1.0.4] at org.opentestfactory.tf2.tf.microservice.components.auth.JwtAuthFilter.checkTokenAgainstPublicKey(JwtAuthFilter.java:101) ~[tf-microservice-components-1.0.0.RC3.jar!/:na] at org.opentestfactory.tf2.tf.microservice.components.auth.JwtAuthFilter.isValidHeader(JwtAuthFilter.java:87) ~[tf-microservice-components-1.0.0.RC3.jar!/:na] at org.opentestfactory.tf2.tf.microservice.components.auth.JwtAuthFilter.checkAuthorizationHeader(JwtAuthFilter.java:69) ~[tf-microservice-components-1.0.0.RC3.jar!/:na] at org.opentestfactory.tf2.tf.microservice.components.auth.JwtAuthFilter.doFilter(JwtAuthFilter.java:59) ~[tf-microservice-components-1.0.0.RC3.jar!/:na] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.9.RELEASE.jar!/:5.2.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar!/:5.2.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.9.RELEASE.jar!/:5.2.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar!/:5.2.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.38.jar!/:9.0.38] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] Caused by: java.lang.NullPointerException: null ... 31 common frames omitted