https://bz.apache.org/bugzilla/show_bug.cgi?id=69939

            Bug ID: 69939
           Summary: SIGSEGV triggered if a PEM-formated certificate lacdks
                    explicit DH parametrs
           Product: Tomcat Native
           Version: 2.0.12
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: blocker
          Priority: P2
         Component: Library
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

Created attachment 40148
  --> https://bz.apache.org/bugzilla/attachment.cgi?id=40148&action=edit
Core dump report from the JVM

Using Tomcat 11.0.15 configured for using PEM-formated SSL certificates and the
native library, if the certificate file lacks embedded DH (or EC) parameters
the bootup sequence will segfault like so:

---------------
Current thread (0x000073033401b630):  JavaThread "main"            
[_thread_in_native, id=4142, stack(0x000073033825f000,0x000073033835f000)
(1024K)]

Stack: [0x000073033825f000,0x000073033835f000],  sp=0x000073033835c6d0,  free
space=1013k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libcrypto.so.3+0x1a46d8]  EVP_PKEY_is_a+0x8
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j 
org.apache.tomcat.jni.SSLContext.setCertificate(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z+0
j 
org.apache.tomcat.util.net.openssl.OpenSSLContext.addCertificate(Lorg/apache/tomcat/util/net/SSLHostConfigCertificate;)V+113
j 
org.apache.tomcat.util.net.openssl.OpenSSLContext.init([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V+229
j 
org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(Ljava/util/List;)Lorg/apache/tomcat/util/net/SSLContext;+16
j 
org.apache.tomcat.util.net.AbstractEndpoint.createSSLContext(Lorg/apache/tomcat/util/net/SSLHostConfig;)V+104
j  org.apache.tomcat.util.net.AbstractEndpoint.initialiseSsl()V+54
j  org.apache.tomcat.util.net.NioEndpoint.bind()V+17
j  org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup()V+1
j  org.apache.tomcat.util.net.AbstractEndpoint.init()V+8
j  org.apache.coyote.AbstractProtocol.init()V+169
j  org.apache.coyote.http11.AbstractHttp11Protocol.init()V+57
j  org.apache.catalina.connector.Connector.initInternal()V+159
j  org.apache.catalina.util.LifecycleBase.init()V+29
j  org.apache.catalina.core.StandardService.initInternal()V+104
j  org.apache.catalina.util.LifecycleBase.init()V+29
j  org.apache.catalina.core.StandardServer.initInternal()V+79
j  org.apache.catalina.util.LifecycleBase.init()V+29
j  org.apache.catalina.startup.Catalina.load()V+78
j  org.apache.catalina.startup.Catalina.load([Ljava/lang/String;)V+9
j 
java.lang.invoke.DirectMethodHandle$Holder.invokeVirtual(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+11
[email protected]
j 
java.lang.invoke.LambdaForm$MH+0x000072e92c0cac00.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+52
[email protected]
j 
java.lang.invoke.Invokers$Holder.invokeExact_MT(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+20
[email protected]
j 
jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+55
[email protected]
j 
jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+23
[email protected]
j 
java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+102
[email protected]
j  org.apache.catalina.startup.Bootstrap.load([Ljava/lang/String;)V+94
j  org.apache.catalina.startup.Bootstrap.main([Ljava/lang/String;)V+314
v  ~StubRoutines::call_stub 0x0000730323c17cbf

siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr:
0x0000000000000060
---------------

Adding DH parameters solves the issue. This (apparently undocumented)
requirement breaks backwards compatibility with existing systems.

The code in question appears to have been added as part of 2.0.10.

Either the docs need to reflect and explain that PEM-formated certificates must
now include embedded DH (or EC) parameters in PEM format as well, or the
requirement should be dropped and DH (or EC) data made optional as it was
before.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to