remm        2005/07/12 10:01:42

  Modified:    jni/java/org/apache/tomcat/jni SSLSocket.java
               http11/src/java/org/apache/coyote/http11
                        Http11AprProcessor.java
  Log:
  - Translate old SSL code to APR (untested right now).
  
  Revision  Changes    Path
  1.18      +1 -4      
jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSLSocket.java
  
  Index: SSLSocket.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSLSocket.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- SSLSocket.java    12 Jul 2005 14:56:09 -0000      1.17
  +++ SSLSocket.java    12 Jul 2005 17:01:42 -0000      1.18
  @@ -16,9 +16,6 @@
   
   package org.apache.tomcat.jni;
   
  -/* Import needed classes */
  -import java.nio.ByteBuffer;
  -
   /** SSL Socket
    *
    * @author Mladen Turk
  
  
  
  1.23      +52 -31    
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java
  
  Index: Http11AprProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- Http11AprProcessor.java   7 Jul 2005 22:54:13 -0000       1.22
  +++ Http11AprProcessor.java   12 Jul 2005 17:01:42 -0000      1.23
  @@ -16,6 +16,7 @@
   
   package org.apache.coyote.http11;
   
  +import java.io.ByteArrayInputStream;
   import java.io.IOException;
   import java.io.InterruptedIOException;
   import java.net.InetAddress;
  @@ -24,6 +25,8 @@
   import java.util.regex.PatternSyntaxException;
   import java.security.AccessController;
   import java.security.PrivilegedAction;
  +import java.security.cert.CertificateFactory;
  +import java.security.cert.X509Certificate;
   
   import org.apache.coyote.ActionCode;
   import org.apache.coyote.ActionHook;
  @@ -41,6 +44,8 @@
   import org.apache.coyote.http11.filters.VoidOutputFilter;
   import org.apache.coyote.http11.filters.BufferedInputFilter;
   import org.apache.tomcat.jni.Address;
  +import org.apache.tomcat.jni.SSL;
  +import org.apache.tomcat.jni.SSLSocket;
   import org.apache.tomcat.jni.Sockaddr;
   import org.apache.tomcat.jni.Socket;
   import org.apache.tomcat.util.buf.Ascii;
  @@ -50,7 +55,6 @@
   import org.apache.tomcat.util.http.FastHttpDateFormat;
   import org.apache.tomcat.util.http.MimeHeaders;
   import org.apache.tomcat.util.net.AprEndpoint;
  -import org.apache.tomcat.util.net.SSLSupport;
   import org.apache.tomcat.util.threads.ThreadWithAttributes;
   
   
  @@ -90,6 +94,8 @@
           outputBuffer = new InternalAprOutputBuffer(response, 
headerBufferSize);
           response.setOutputBuffer(outputBuffer);
           request.setResponse(response);
  +        
  +        ssl = !"off".equalsIgnoreCase(endpoint.getSSLEngine());
   
           initializeFilters();
   
  @@ -194,10 +200,10 @@
   
   
       /**
  -     * SSL information.
  +     * SSL enabled ?
        */
  -    protected SSLSupport sslSupport;
  -
  +    protected boolean ssl = false;
  +    
   
       /**
        * Socket associated with the current connection.
  @@ -645,14 +651,6 @@
   
   
       /**
  -     * Set the SSL information for this HTTP connection.
  -     */
  -    public void setSSLSupport(SSLSupport sslSupport) {
  -        this.sslSupport = sslSupport;
  -    }
  -
  -
  -    /**
        * Set the flag to control upload time-outs.
        */
       public void setDisableUploadTimeout(boolean isDisabled) {
  @@ -898,9 +896,6 @@
           inputBuffer.recycle();
           outputBuffer.recycle();
   
  -        // Recycle ssl info
  -        sslSupport = null;
  -        
           return openSocket;
           
       }
  @@ -1084,23 +1079,36 @@
           } else if (actionCode == ActionCode.ACTION_REQ_SSL_ATTRIBUTE ) {
   
               try {
  -                if (sslSupport != null) {
  -                    Object sslO = sslSupport.getCipherSuite();
  +                if (ssl) {
  +                    Object sslO = SSLSocket.getInfoS(socket, 
SSL.SSL_INFO_CIPHER);
                       if (sslO != null)
                           request.setAttribute
  -                            (SSLSupport.CIPHER_SUITE_KEY, sslO);
  -                    sslO = sslSupport.getPeerCertificateChain(false);
  +                            ("javax.servlet.request.cipher_suite", sslO);
  +                    int certLength = SSLSocket.getInfoI(socket, 
SSL.SSL_INFO_CLIENT_CERT_CHAIN);
  +                    X509Certificate[] certs = new 
X509Certificate[certLength];
  +                    for (int i = 0; i < certLength; i++) {
  +                        byte[] data = SSLSocket.getInfoB(socket, 
SSL.SSL_INFO_CLIENT_CERT_CHAIN + i);
  +                        CertificateFactory cf =
  +                            CertificateFactory.getInstance("X.509");
  +                        ByteArrayInputStream stream = new 
ByteArrayInputStream(data);
  +                        certs[i] = (X509Certificate) 
cf.generateCertificate(stream);
  +                    }
  +                    if (certLength > 0) {
  +                        sslO = certs;
  +                    } else {
  +                        sslO = null;
  +                    }
                       if (sslO != null)
                           request.setAttribute
  -                            (SSLSupport.CERTIFICATE_KEY, sslO);
  -                    sslO = sslSupport.getKeySize();
  +                            ("javax.servlet.request.X509Certificate", sslO);
  +                    sslO = new Integer(SSLSocket.getInfoI(socket, 
SSL.SSL_INFO_CIPHER_USEKEYSIZE));
                       if (sslO != null)
                           request.setAttribute
  -                            (SSLSupport.KEY_SIZE_KEY, sslO);
  -                    sslO = sslSupport.getSessionId();
  +                            ("javax.servlet.request.key_size", sslO);
  +                    sslO = SSLSocket.getInfoS(socket, 
SSL.SSL_INFO_SESSION_ID);
                       if (sslO != null)
                           request.setAttribute
  -                            (SSLSupport.SESSION_ID_KEY, sslO);
  +                            ("javax.servlet.request.ssl_session", sslO);
                   }
               } catch (Exception e) {
                   log.warn("Exception getting SSL attributes " ,e);
  @@ -1108,7 +1116,7 @@
   
           } else if (actionCode == ActionCode.ACTION_REQ_SSL_CERTIFICATE) {
   
  -            if( sslSupport != null) {
  +            if (ssl) {
                   /*
                    * Consume and buffer the request body, so that it does not
                    * interfere with the client's handshake messages
  @@ -1119,11 +1127,24 @@
                   inputBuffer.addActiveFilter
                       (inputFilters[Constants.BUFFERED_FILTER]);
                   try {
  -                    Object sslO = sslSupport.getPeerCertificateChain(true);
  -                    if( sslO != null) {
  -                        request.setAttribute
  -                            (SSLSupport.CERTIFICATE_KEY, sslO);
  +                    // FIXME: Verify this is the right thing to do
  +                    SSLSocket.renegotiate(socket);
  +                    int certLength = SSLSocket.getInfoI(socket, 
SSL.SSL_INFO_CLIENT_CERT_CHAIN);
  +                    X509Certificate[] certs = new 
X509Certificate[certLength];
  +                    for (int i = 0; i < certLength; i++) {
  +                        byte[] data = SSLSocket.getInfoB(socket, 
SSL.SSL_INFO_CLIENT_CERT_CHAIN + i);
  +                        CertificateFactory cf =
  +                            CertificateFactory.getInstance("X.509");
  +                        ByteArrayInputStream stream = new 
ByteArrayInputStream(data);
  +                        certs[i] = (X509Certificate) 
cf.generateCertificate(stream);
                       }
  +                    Object sslO = null;
  +                    if (certLength > 0) {
  +                        sslO = certs;
  +                    }
  +                    if (sslO != null)
  +                        request.setAttribute
  +                            ("javax.servlet.request.X509Certificate", sslO);
                   } catch (Exception e) {
                       log.warn("Exception getting SSL Cert", e);
                   }
  @@ -1179,7 +1200,7 @@
           contentDelimitation = false;
           expectation = false;
           sendfileData = null;
  -        if (sslSupport != null) {
  +        if (ssl) {
               request.scheme().setString("https");
           }
           MessageBytes protocolMB = request.protocol();
  @@ -1396,7 +1417,7 @@
           }
   
           if (colonPos < 0) {
  -            if (sslSupport == null) {
  +            if (ssl) {
                   // 80 - Default HTTTP port
                   request.setServerPort(80);
               } else {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to