--- apache-tomcat-6.0.10-src.orig/java/org/apache/coyote/ajp/AjpAprProcessor.java 2007-02-13 14:04:50.000000000 +0100 +++ apache-tomcat-6.0.10-src.orig/java/org/apache/coyote/ajp/AjpAprProcessor.java 2007-03-25 11:25:40.000000000 +0200 @@ -562,14 +562,26 @@ new ByteArrayInputStream(certData.getBytes(), certData.getStart(), certData.getLength()); - // Fill the first element. + // Fill all elements try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - X509Certificate cert = (X509Certificate) - cf.generateCertificate(bais); - jsseCerts = new X509Certificate[1]; - jsseCerts[0] = cert; + int i = 0; + while (bais.available() > 0) { + X509Certificate cert = (X509Certificate) + cf.generateCertificate(bais); + if (jsseCerts == null) { + jsseCerts = new X509Certificate[1]; + } else { + X509Certificate tmpJsseCerts[] = + new X509Certificate[jsseCerts.length + 1]; + System.arraycopy(jsseCerts, 0, + tmpJsseCerts, 0, + jsseCerts.length); + jsseCerts = tmpJsseCerts; + } + jsseCerts[i++] = cert; + } request.setAttribute(AprEndpoint.CERTIFICATE_KEY, jsseCerts); } catch (java.security.cert.CertificateException e) { log.error(sm.getString("ajpprocessor.certs.fail"), e); --- apache-tomcat-6.0.10-src.orig/java/org/apache/coyote/ajp/AjpProcessor.java 2007-02-13 14:04:50.000000000 +0100 +++ apache-tomcat-6.0.10-src.orig/java/org/apache/coyote/ajp/AjpProcessor.java 2007-03-25 11:29:48.000000000 +0200 @@ -550,14 +550,26 @@ new ByteArrayInputStream(certData.getBytes(), certData.getStart(), certData.getLength()); - // Fill the first element. + // Fill all elements try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - X509Certificate cert = (X509Certificate) - cf.generateCertificate(bais); - jsseCerts = new X509Certificate[1]; - jsseCerts[0] = cert; + int i = 0; + while (bais.available() > 0) { + X509Certificate cert = (X509Certificate) + cf.generateCertificate(bais); + if (jsseCerts == null) { + jsseCerts = new X509Certificate[1]; + } else { + X509Certificate tmpJsseCerts[] = + new X509Certificate[jsseCerts.length + 1]; + System.arraycopy(jsseCerts, 0, + tmpJsseCerts, 0, + jsseCerts.length); + jsseCerts = tmpJsseCerts; + } + jsseCerts[i++] = cert; + } request.setAttribute(JIoEndpoint.CERTIFICATE_KEY, jsseCerts); } catch (java.security.cert.CertificateException e) { log.error(sm.getString("ajpprocessor.certs.fail"), e); --- apache-tomcat-6.0.10-src.orig/java/org/apache/jk/core/MsgContext.java 2007-02-13 14:04:52.000000000 +0100 +++ apache-tomcat-6.0.10-src.orig/java/org/apache/jk/core/MsgContext.java 2007-03-25 10:51:49.000000000 +0200 @@ -321,15 +321,27 @@ certData.getStart(), certData.getLength()); - // Fill the first element. + // Fill all elements X509Certificate jsseCerts[] = null; try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - X509Certificate cert = (X509Certificate) - cf.generateCertificate(bais); - jsseCerts = new X509Certificate[1]; - jsseCerts[0] = cert; + int i = 0; + while (bais.available() > 0) { + X509Certificate cert = (X509Certificate) + cf.generateCertificate(bais); + if (jsseCerts == null) { + jsseCerts = new X509Certificate[1]; + } else { + X509Certificate tmpJsseCerts[] = + new X509Certificate[jsseCerts.length + 1]; + System.arraycopy(jsseCerts, 0, + tmpJsseCerts, 0, + jsseCerts.length); + jsseCerts = tmpJsseCerts; + } + jsseCerts[i++] = cert; + } } catch(java.security.cert.CertificateException e) { log.error("Certificate convertion failed" , e ); return;