jfclere     01/09/21 01:29:56

  Modified:    .        build.xml
               src/share/org/apache/tomcat/modules/server
                        Http10Interceptor.java
  Added:       src/share/org/apache/tomcat/util/compat CertCompat.java
                        JSSECertCompat.java
  Log:
  Add support for JSSE in Http10Connector.
  
  Revision  Changes    Path
  1.154     +2 -0      jakarta-tomcat/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/build.xml,v
  retrieving revision 1.153
  retrieving revision 1.154
  diff -u -r1.153 -r1.154
  --- build.xml 2001/09/18 23:24:46     1.153
  +++ build.xml 2001/09/21 08:29:56     1.154
  @@ -256,6 +256,8 @@
         <include name="org/apache/tomcat/util/**"/>
         <exclude name="**/util/net/SSLSocketFactory.java" unless="jsse.present"/>
         <exclude name="**/util/net/SSLSocketFactory.java" unless="jdk12.present"/>
  +      <exclude name="**/util/compat/JSSECertCompat.java" unless="jsse.present"/>
  +      <exclude name="**/util/compat/JSSECertCompat.java" unless="jdk12.present"/>
         <exclude name="**/util/compat/Jdk12Support.java" unless="jdk12.present"/>
         <exclude name="**/util/depend/DependClassLoader12.java" 
unless="jdk12.present"/>
       </javac>
  
  
  
  1.24      +8 -0      
jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Http10Interceptor.java
  
  Index: Http10Interceptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Http10Interceptor.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- Http10Interceptor.java    2001/09/17 04:56:02     1.23
  +++ Http10Interceptor.java    2001/09/21 08:29:56     1.24
  @@ -71,6 +71,7 @@
   import org.apache.tomcat.util.net.*;
   import org.apache.tomcat.util.net.ServerSocketFactory;
   import org.apache.tomcat.util.log.*;
  +import org.apache.tomcat.util.compat.*;
   
   /** Standalone http.
    *
  @@ -204,9 +205,16 @@
       Http10 http=new Http10();
       private boolean moreRequests = false;
       Socket socket;
  +    static CertCompat certcompat = CertCompat.getCertCompat();
       
       public HttpRequest() {
           super();
  +    }
  +    public Object getAttribute(String name) {
  +        if (name.equals("javax.servlet.request.X509Certificate")) {
  +            return(certcompat.getX509Certificates(socket));
  +     }
  +        return(super.getAttribute(name));
       }
   
       public void recycle() {
  
  
  
  1.1                  
jakarta-tomcat/src/share/org/apache/tomcat/util/compat/CertCompat.java
  
  Index: CertCompat.java
  ===================================================================
  package org.apache.tomcat.util.compat;
  
  import java.net.Socket;
  
  public class CertCompat {
      /** Return the client certificate.
       */
      public Object getX509Certificates(Socket s)
      {
          return null;
      }
  
      // -------------------- Factory --------------------
      /** Get a compatibility helper class.
       */
      public static CertCompat getCertCompat() {
          return compat;
      }
  
      static CertCompat compat;
  
      static {
          init();
      }
  
      static final String JSSE_SUPPORT=
          "org.apache.tomcat.util.compat.JSSECertCompat";
  
      private static void init() {
          try {
              Class c=Class.forName(JSSE_SUPPORT);
              compat=(CertCompat)c.newInstance();
          } catch( Exception ex ) {
              compat=new CertCompat();
          }
      }
  }
  
  
  
  1.1                  
jakarta-tomcat/src/share/org/apache/tomcat/util/compat/JSSECertCompat.java
  
  Index: JSSECertCompat.java
  ===================================================================
  package org.apache.tomcat.util.compat;
  
  import java.io.ByteArrayInputStream;
  import java.net.Socket;
  
  import javax.net.ssl.SSLSession;
  import javax.net.ssl.SSLSocket;
  import java.security.cert.CertificateFactory;
  import javax.security.cert.X509Certificate;
  
  public class JSSECertCompat extends CertCompat {
      /** Return the client certificate.
       */
      public Object getX509Certificates(Socket s)
      {
  
          // Make sure it is a  SSLSocket.
          if (s == null)
              return null;
          if (!(s instanceof SSLSocket))
              return null;
          SSLSocket socket = (SSLSocket) s;
  
          // Look up the current SSLSession
          SSLSession session = socket.getSession();
          if (session == null)
              return null;
  
          // Convert JSSE's certificate format to the ones we need
          X509Certificate jsseCerts[] = null;
          java.security.cert.X509Certificate x509Certs[] = null;
          try {
              jsseCerts = session.getPeerCertificateChain();
              if (jsseCerts == null)
                  jsseCerts = new X509Certificate[0];
              x509Certs =
                new java.security.cert.X509Certificate[jsseCerts.length];
              for (int i = 0; i < x509Certs.length; i++) {
                  byte buffer[] = jsseCerts[i].getEncoded();
                  CertificateFactory cf =
                    CertificateFactory.getInstance("X.509");
                  ByteArrayInputStream stream =
                    new ByteArrayInputStream(buffer);
                  x509Certs[i] = (java.security.cert.X509Certificate)
                    cf.generateCertificate(stream);
              }
          } catch (Throwable t) {
              return null;
          }
  
          if ((x509Certs == null) || (x509Certs.length < 1))
              return null;
  
          return x509Certs;
      }
  }
  
  
  

Reply via email to