michael-o opened a new pull request, #672:
URL: https://github.com/apache/tomcat/pull/672

   NOTE: Disregard the `[TEMPORARY]` commits, they are for testing purposes 
only and will *not* be merged.
   
   Test matrix:
   
   * OpenSSL: 1.1.1, 3.0
   * Tomcat Native: 1.2, 2.0
   * OS: Windows, HP-UX, FreeBSD
   * Java versions: 8, 11, 21
   * Combinations:
     * NIO + JSSE + PEM
     * NIO + JSSE + Keystore
     * NIO + OpenSSL + PEM
     * NIO + OpenSSL + Keystore
     * APR + OpenSSL + PEM
     * APR + OpenSSL + Keystore
   * Password file combinations:
     * valid password (`key-password`/`keystore-password`)
     * non-existing file (`non-existing-password`)
     * unreadable file (`key-perm-password`/`keystore-perm-password`)
     * empty file (`empty-password`)
     * invalid password (`invalid-password`)
     * multiple lines (`key-multi-password`/`keystore-multi-password`)
   * Certificates: self-signed and issued by our enterprise CA system
   
   `server.xml` snippet:
   ```
   <Connector port="20001" protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxThreads="150" SSLEnabled="true"
              maxParameterCount="1000"
              
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation">
       <SSLHostConfig caCertificateFile="conf/cacerts.crt">
           <Certificate certificateKeyFile="conf/certs-localhost/key.crt"
                        
certificateKeyPasswordFile="conf/certs-localhost/key-password"
                        certificateFile="conf/certs-localhost/cert.crt"
                        type="RSA" />
       </SSLHostConfig>
   </Connector>
   
   <Connector port="20002" protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxThreads="150" SSLEnabled="true"
              maxParameterCount="1000"
              
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation">
       <SSLHostConfig>
           <Certificate 
certificateKeystoreFile="conf/certs-localhost/keystore.p12"
                        
certificateKeystorePasswordFile="conf/certs-localhost/keystore-password"
                        certificateKeyAlias="localhost"
                        type="RSA" />
       </SSLHostConfig>
   </Connector>
   
   <Connector port="20003" protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxThreads="150" SSLEnabled="true"
              maxParameterCount="1000"
              
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation">
       <SSLHostConfig caCertificateFile="conf/cacerts.crt">
           <Certificate certificateKeyFile="conf/certs-localhost/key.crt"
                        
certificateKeyPasswordFile="conf/certs-localhost/key-password"
                        certificateFile="conf/certs-localhost/cert.crt"
                        type="RSA" />
       </SSLHostConfig>
   </Connector>
   
   <Connector port="20004" protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxThreads="150" SSLEnabled="true"
              maxParameterCount="1000"
              
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation">
       <SSLHostConfig>
           <Certificate 
certificateKeystoreFile="conf/certs-localhost/keystore.p12"
                        
certificateKeystorePasswordFile="conf/certs-localhost/keystore-password"
                        certificateKeyAlias="localhost"
                        type="RSA" />
       </SSLHostConfig>
   </Connector>
   
   <Connector port="30001" protocol="org.apache.coyote.http11.Http11AprProtocol"
              maxThreads="150" SSLEnabled="true"
              maxParameterCount="1000">
       <SSLHostConfig caCertificateFile="conf/cacerts.crt">
           <Certificate certificateKeyFile="conf/certs-localhost/key.crt"
                        
certificateKeyPasswordFile="conf/certs-localhost/key-password"
                        certificateFile="conf/certs-localhost/cert.crt"
                        type="RSA" />
       </SSLHostConfig>
   </Connector>
   
   <Connector port="30002" protocol="org.apache.coyote.http11.Http11AprProtocol"
              maxThreads="150" SSLEnabled="true"
              maxParameterCount="1000">
       <SSLHostConfig>
           <Certificate 
certificateKeystoreFile="conf/certs-localhost/keystore.p12"
                        
certificateKeystorePasswordFile="conf/certs-localhost/keystore-password"
                        certificateKeyAlias="localhost"
                        type="RSA" />
       </SSLHostConfig>
   </Connector>
   ```
   
   This has also been tried with:
   ```
   <Listener 
className="org.apache.catalina.security.TLSCertificateReloadListener" />
   ```
   It plays every nicely with the reloader and you can now swap everything: 
key, cert *and* password as likely required by many. Full automation, if 
desired.
   
   I have tried all of the above combinations to the extend they are 
available/possible. It just worked with positive and negative cases.
   
   Found issues:
   * https://bz.apache.org/bugzilla/show_bug.cgi?id=67675
   * https://bz.apache.org/bugzilla/show_bug.cgi?id=67666
   * https://bz.apache.org/bugzilla/show_bug.cgi?id=67628
   * https://bz.apache.org/bugzilla/show_bug.cgi?id=67609
   
   Important: First https://github.com/apache/tomcat-native/pull/20 needs to be 
merged and released, then Tomcat branches synched and then this can be merged.
   
   Approriate, ready-to-merge branches exist for all active versions.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to