Blame SOURCES/mod_nss-tlsv1_1.patch

90ca4f
diff -rupN mod_nss-1.0.8.orig/docs/mod_nss.html mod_nss-1.0.8/docs/mod_nss.html
90ca4f
--- mod_nss-1.0.8.orig/docs/mod_nss.html	2012-10-15 13:53:48.889995000 -0700
90ca4f
+++ mod_nss-1.0.8/docs/mod_nss.html	2012-10-16 11:37:30.983783000 -0700
90ca4f
@@ -466,7 +466,7 @@ Example
90ca4f
 
90ca4f
 Enables or disables FIPS 140 mode. This replaces the standard
90ca4f
 internal PKCS#11 module with a FIPS-enabled one. It also forces the
90ca4f
-enabled protocols to TLSv1 and disables all ciphers but the
90ca4f
+enabled protocols to TLSv1.1 and TLS v1.0 and disables all ciphers but the
90ca4f
 FIPS ones. You may still select which ciphers you would like
90ca4f
 limited to those that are FIPS-certified. Any non-FIPS that are
90ca4f
 included in the NSSCipherSuite entry are automatically disabled.
90ca4f
@@ -570,7 +570,7 @@ definition
90ca4f
       
90ca4f
       SSL_RSA_WITH_3DES_EDE_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
       
90ca4f
     
90ca4f
     
90ca4f
@@ -578,106 +578,106 @@ definition
90ca4f
       
90ca4f
       SSL_RSA_WITH_DES_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_null_md5
90ca4f
       
90ca4f
       SSL_RSA_WITH_NULL_MD5
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_null_sha
90ca4f
       
90ca4f
       SSL_RSA_WITH_NULL_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_rc2_40_md5
90ca4f
       SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_rc4_128_md5
90ca4f
       SSL_RSA_WITH_RC4_128_MD5
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_rc4_128_sha
90ca4f
       SSL_RSA_WITH_RC4_128_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_rc4_40_md5
90ca4f
       SSL_RSA_EXPORT_WITH_RC4_40_MD5
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       fortezza
90ca4f
       
90ca4f
       SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       fortezza_rc4_128_sha
90ca4f
       
90ca4f
       SSL_FORTEZZA_DMS_WITH_RC4_128_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       fortezza_null
90ca4f
       
90ca4f
       SSL_FORTEZZA_DMS_WITH_NULL_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       fips_des_sha
90ca4f
       
90ca4f
       SSL_RSA_FIPS_WITH_DES_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       fips_3des_sha
90ca4f
       
90ca4f
       SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_des_56_sha
90ca4f
       TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
90ca4f
       
90ca4f
-      SSL3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_rc4_56_sha
90ca4f
       TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_aes_128_sha
90ca4f
       
90ca4f
       TLS_RSA_WITH_AES_128_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       rsa_aes_256_sha
90ca4f
       
90ca4f
       TLS_RSA_WITH_AES_256_CBC_SHA
90ca4f
       
90ca4f
-      SSLv3/TLSv1
90ca4f
+      SSLv3/TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
   
90ca4f
 
90ca4f
@@ -698,127 +698,127 @@ Definition
90ca4f
     
90ca4f
       ecdh_ecdsa_null_sha
90ca4f
       TLS_ECDH_ECDSA_WITH_NULL_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_ecdsa_rc4_128_sha
90ca4f
       TLS_ECDH_ECDSA_WITH_RC4_128_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_ecdsa_3des_sha
90ca4f
       TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_ecdsa_aes_128_sha
90ca4f
       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_ecdsa_aes_256_sha
90ca4f
       TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_ecdsa_null_sha
90ca4f
       TLS_ECDHE_ECDSA_WITH_NULL_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_ecdsa_rc4_128_sha
90ca4f
       TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_ecdsa_3des_sha
90ca4f
       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_ecdsa_aes_128_sha
90ca4f
       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_ecdsa_aes_256_sha
90ca4f
       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_rsa_null_sha
90ca4f
       TLS_ECDH_RSA_WITH_NULL_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_rsa_128_sha
90ca4f
       TLS_ECDH_RSA_WITH_RC4_128_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_rsa_3des_sha
90ca4f
       TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_rsa_aes_128_sha
90ca4f
       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_rsa_aes_256_sha
90ca4f
       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       echde_rsa_null
90ca4f
       TLS_ECDHE_RSA_WITH_NULL_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_rsa_rc4_128_sha
90ca4f
       TLS_ECDHE_RSA_WITH_RC4_128_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_rsa_3des_sha
90ca4f
       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_rsa_aes_128_sha
90ca4f
       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdhe_rsa_aes_256_sha
90ca4f
       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_anon_null_sha
90ca4f
       TLS_ECDH_anon_WITH_NULL_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_anon_rc4_128sha
90ca4f
       TLS_ECDH_anon_WITH_RC4_128_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_anon_3des_sha
90ca4f
       TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_anon_aes_128_sha
90ca4f
       TLS_ECDH_anon_WITH_AES_128_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
     
90ca4f
       ecdh_anon_aes_256_sha
90ca4f
       TLS_ECDH_anon_WITH_AES_256_CBC_SHA
90ca4f
-      TLSv1
90ca4f
+      TLSv1.0/TLSv1.1
90ca4f
     
90ca4f
   
90ca4f
 
90ca4f
@@ -839,16 +839,35 @@ specifically but allows ciphers for that
90ca4f
 Options are:
90ca4f
 
    90ca4f
       
  • SSLv3
  • 90ca4f
    -  
  • TLSv1
  • 90ca4f
    +  
  • TLSv1 (legacy only; replaced by TLSv1.0)
  • 90ca4f
    +  
  • TLSv1.0
  • 90ca4f
    +  
  • TLSv1.1
  • 90ca4f
       
  • All
  • 90ca4f
     
    90ca4f
     Note that this differs from mod_ssl in that you can't add or subtract
    90ca4f
     protocols.
    90ca4f
    +
    90ca4f
    +If no NSSProtocol is specified, mod_nss will default to allowing the use of
    90ca4f
    +the SSLv3, TLSv1.0, and TLSv1.1 protocols, where SSLv3 will be set to be the
    90ca4f
    +minimum protocol allowed, and TLSv1.1 will be set to be the maximum protocol
    90ca4f
    +allowed.
    90ca4f
    +
    90ca4f
    +If values for NSSProtocol are specified, mod_nss will set both the minimum
    90ca4f
    +and the maximum allowed protocols based upon these entries allowing for the
    90ca4f
    +inclusion of every protocol in-between. For example, if only SSLv3 and TLSv1.1
    90ca4f
    +are specified, SSLv3, TLSv1.0, and TLSv1.1 will all be allowed, as NSS utilizes
    90ca4f
    +protocol ranges to accept all protocols inclusively
    90ca4f
    +(TLS 1.1 -> TLS 1.0 -> SSL 3.0), and does not allow exclusion of any protocols
    90ca4f
    +in the middle of a range (e. g. - TLS 1.0).
    90ca4f
    +
    90ca4f
    +Finally, NSS will always automatically negotiate the use of the strongest
    90ca4f
    +possible protocol that has been specified which is acceptable to both sides of
    90ca4f
    +a given connection.
    90ca4f
     SSLv2 is not supported by default at this time.
    90ca4f
     
    90ca4f
     Example
    90ca4f
     
    90ca4f
    -NSSProtocol SSLv3,TLSv1
    90ca4f
    +NSSProtocol SSLv3,TLSv1.0,TLSv1.1
    90ca4f
     
    90ca4f
     <big><big>NSSNickname
    90ca4f
     </big></big>
    90ca4f
    @@ -1101,7 +1120,7 @@ was compiled against.
    90ca4f
         
    90ca4f
           SSL_PROTOCOL
    90ca4f
           
    90ca4f
    -      SSLv2, SSLv3 or TLSv1
    90ca4f
    +      SSLv2, SSLv3, TLSv1.0, or TLSv1.1
    90ca4f
           
    90ca4f
         
    90ca4f
         
    90ca4f
    @@ -1443,7 +1462,7 @@ Opera, and
    90ca4f
     Safari) support SSL 3 and TLS so there is no need for a web server to
    90ca4f
     support
    90ca4f
     SSL 2. There are some known attacks against SSL 2 that are handled by
    90ca4f
    -SSL 3/TLS. SSL2 also doesn't support useful features like client
    90ca4f
    +SSL 3/TLS. SSLv2 also doesn't support useful features like client
    90ca4f
     authentication.
    90ca4f
     
    90ca4f
     

    Frequently Asked Questions

    90ca4f
    diff -rupN mod_nss-1.0.8.orig/mod_nss.c mod_nss-1.0.8/mod_nss.c
    90ca4f
    --- mod_nss-1.0.8.orig/mod_nss.c	2012-10-15 13:53:48.971995000 -0700
    90ca4f
    +++ mod_nss-1.0.8/mod_nss.c	2012-10-17 09:46:18.838689000 -0700
    90ca4f
    @@ -90,7 +90,7 @@ static const command_rec nss_config_cmds
    90ca4f
                     "(`[+-]XXX,...,[+-]XXX' - see manual)")
    90ca4f
         SSL_CMD_SRV(Protocol, RAW_ARGS,
    90ca4f
                     "Enable the various SSL protocols"
    90ca4f
    -                "(`[SSLv2|SSLv3|TLSv1|all] ...' - see manual)")
    90ca4f
    +                "(`[SSLv2|SSLv3|TLSv1.0|TLSv1.1|all] ...' - see manual)")
    90ca4f
         SSL_CMD_ALL(VerifyClient, TAKE1,
    90ca4f
                     "SSL Client Authentication "
    90ca4f
                     "(`none', `optional', `require'")
    90ca4f
    @@ -135,7 +135,7 @@ static const command_rec nss_config_cmds
    90ca4f
                     "(`on', `off')")
    90ca4f
         SSL_CMD_SRV(ProxyProtocol, RAW_ARGS,
    90ca4f
                    "SSL Proxy: enable or disable SSL protocol flavors "
    90ca4f
    -               "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
    90ca4f
    +               "(`[+-][SSLv2|SSLv3|TLSv1.0|TLSv1.1] ...' - see manual)")
    90ca4f
         SSL_CMD_SRV(ProxyCipherSuite, TAKE1,
    90ca4f
                    "SSL Proxy: colon-delimited list of permitted SSL ciphers "
    90ca4f
                    "(`XXX:...:XXX' - see manual)")
    90ca4f
    diff -rupN mod_nss-1.0.8.orig/nss.conf.in mod_nss-1.0.8/nss.conf.in
    90ca4f
    --- mod_nss-1.0.8.orig/nss.conf.in	2012-10-15 13:53:48.856995000 -0700
    90ca4f
    +++ mod_nss-1.0.8/nss.conf.in	2012-10-19 18:06:59.101468000 -0700
    90ca4f
    @@ -111,7 +111,16 @@ NSSCipherSuite +rsa_rc4_128_md5,+rsa_rc4
    90ca4f
     # ECC enabled NSS and mod_nss and want to use Elliptical Curve Cryptography
    90ca4f
     #NSSCipherSuite +rsa_rc4_128_md5,+rsa_rc4_128_sha,+rsa_3des_sha,-rsa_des_sha,-rsa_rc4_40_md5,-rsa_rc2_40_md5,-rsa_null_md5,-rsa_null_sha,+fips_3des_sha,-fips_des_sha,-fortezza,-fortezza_rc4_128_sha,-fortezza_null,-rsa_des_56_sha,-rsa_rc4_56_sha,+rsa_aes_128_sha,+rsa_aes_256_sha,-ecdh_ecdsa_null_sha,+ecdh_ecdsa_rc4_128_sha,+ecdh_ecdsa_3des_sha,+ecdh_ecdsa_aes_128_sha,+ecdh_ecdsa_aes_256_sha,-ecdhe_ecdsa_null_sha,+ecdhe_ecdsa_rc4_128_sha,+ecdhe_ecdsa_3des_sha,+ecdhe_ecdsa_aes_128_sha,+ecdhe_ecdsa_aes_256_sha,-ecdh_rsa_null_sha,+ecdh_rsa_128_sha,+ecdh_rsa_3des_sha,+ecdh_rsa_aes_128_sha,+ecdh_rsa_aes_256_sha,-echde_rsa_null,+ecdhe_rsa_rc4_128_sha,+ecdhe_rsa_3des_sha,+ecdhe_rsa_aes_128_sha,+ecdhe_rsa_aes_256_sha
    90ca4f
     
    90ca4f
    -NSSProtocol SSLv3,TLSv1
    90ca4f
    +#   SSL Protocol:
    90ca4f
    +#   Cryptographic protocols that provide communication security.
    90ca4f
    +#   NSS handles the specified protocols as "ranges", and automatically
    90ca4f
    +#   negotiates the use of the strongest protocol for a connection starting
    90ca4f
    +#   with the maximum specified protocol and downgrading as necessary to the
    90ca4f
    +#   minimum specified protocol that can be used between two processes.
    90ca4f
    +#   Since all protocol ranges are completely inclusive, and no protocol in the
    90ca4f
    +#   middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1"
    90ca4f
    +#   is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1".
    90ca4f
    +NSSProtocol SSLv3,TLSv1.0,TLSv1.1
    90ca4f
     
    90ca4f
     #   SSL Certificate Nickname:
    90ca4f
     #   The nickname of the RSA server certificate you are going to use.
    90ca4f
    diff -rupN mod_nss-1.0.8.orig/nss_engine_init.c mod_nss-1.0.8/nss_engine_init.c
    90ca4f
    --- mod_nss-1.0.8.orig/nss_engine_init.c	2012-10-15 13:53:49.165998000 -0700
    90ca4f
    +++ mod_nss-1.0.8/nss_engine_init.c	2012-10-19 17:44:04.973592000 -0700
    90ca4f
    @@ -616,62 +616,98 @@ static void nss_init_ctx_protocol(server
    90ca4f
                                       apr_pool_t *ptemp,
    90ca4f
                                       modnss_ctx_t *mctx)
    90ca4f
     {
    90ca4f
    -    int ssl2, ssl3, tls;
    90ca4f
    +    int ssl2, ssl3, tls, tls1_1;
    90ca4f
    +    char *protocol_marker = NULL;
    90ca4f
         char *lprotocols = NULL;
    90ca4f
         SECStatus stat;
    90ca4f
    +    SSLVersionRange enabledVersions;
    90ca4f
     
    90ca4f
    -    ssl2 = ssl3 = tls = 0;
    90ca4f
    +    ssl2 = ssl3 = tls = tls1_1 = 0;
    90ca4f
    +
    90ca4f
    +    /*
    90ca4f
    +     * Since this routine will be invoked individually for every thread
    90ca4f
    +     * associated with each 'server' object as well as for every thread
    90ca4f
    +     * associated with each 'proxy' object, identify the protocol marker
    90ca4f
    +     * ('NSSProtocol' for 'server' versus 'NSSProxyProtocol' for 'proxy')
    90ca4f
    +     * via each thread's object type and apply this useful information to
    90ca4f
    +     * all log messages.
    90ca4f
    +     */
    90ca4f
    +    if (mctx == mctx->sc->server) {
    90ca4f
    +        protocol_marker = "NSSProtocol";
    90ca4f
    +    } else if (mctx == mctx->sc->proxy) {
    90ca4f
    +        protocol_marker = "NSSProxyProtocol";
    90ca4f
    +    }
    90ca4f
     
    90ca4f
         if (mctx->sc->fips) {
    90ca4f
             ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
    90ca4f
    -            "In FIPS mode, enabling TLSv1");
    90ca4f
    -        tls = 1;
    90ca4f
    +            "In FIPS mode ignoring %s list, enabling TLSv1.0 and TLSv1.1",
    90ca4f
    +            protocol_marker);
    90ca4f
    +        tls = tls1_1 = 1;
    90ca4f
         } else {
    90ca4f
             if (mctx->auth.protocols == NULL) {
    90ca4f
    -            /*
    90ca4f
    -             * Since this routine will be invoked individually for every
    90ca4f
    -             * thread associated with each 'server' object as well as for
    90ca4f
    -             * every thread associated with each 'proxy' object, issue a
    90ca4f
    -             * single per-thread 'warning' message for either a 'server'
    90ca4f
    -             * or a 'proxy' based upon the thread's object type.
    90ca4f
    -             */
    90ca4f
    -            if (mctx == mctx->sc->server) {
    90ca4f
    -                ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
    90ca4f
    -                    "NSSProtocol value not set; using: SSLv3 and TLSv1");
    90ca4f
    -            } else if (mctx == mctx->sc->proxy) {
    90ca4f
    -                ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
    90ca4f
    -                    "NSSProxyProtocol value not set; using: SSLv3 and TLSv1");
    90ca4f
    -            }
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
    90ca4f
    +                         "%s value not set; using: SSLv3, TLSv1.0, and TLSv1.1",
    90ca4f
    +                         protocol_marker);
    90ca4f
     
    90ca4f
    -            ssl3 = tls = 1;
    90ca4f
    +            ssl3 = tls = tls1_1 = 1;
    90ca4f
             } else {
    90ca4f
                 lprotocols = strdup(mctx->auth.protocols);
    90ca4f
                 ap_str_tolower(lprotocols);
    90ca4f
     
    90ca4f
                 if (strstr(lprotocols, "all") != NULL) {
    90ca4f
     #ifdef WANT_SSL2
    90ca4f
    -                ssl2 = ssl3 = tls = 1;
    90ca4f
    +                ssl2 = ssl3 = tls = tls1_1= 1;
    90ca4f
     #else
    90ca4f
    -                ssl3 = tls = 1;
    90ca4f
    +                ssl3 = tls = tls1_1 = 1;
    90ca4f
     #endif
    90ca4f
                 } else {
    90ca4f
    -                if (strstr(lprotocols, "sslv2") != NULL) {
    90ca4f
    +                char *protocol_list = NULL;
    90ca4f
    +                char *saveptr = NULL;
    90ca4f
    +                char *token = NULL;
    90ca4f
    +
    90ca4f
    +                for (protocol_list = lprotocols; ; protocol_list = NULL) {
    90ca4f
    +                    token = strtok_r(protocol_list, ",", &saveptr);
    90ca4f
    +                    if (token == NULL) {
    90ca4f
    +                        break;
    90ca4f
    +                    } else if (strcmp(token, "sslv2") == 0) {
    90ca4f
     #ifdef WANT_SSL2
    90ca4f
    -                    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "Enabling SSL2");
    90ca4f
    -                    ssl2 = 1;
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                                     "%s:  Enabling SSL2",
    90ca4f
    +                                     protocol_marker);
    90ca4f
    +                        ssl2 = 1;
    90ca4f
     #else
    90ca4f
    -                    ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, "SSL2 is not supported");
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
    90ca4f
    +                                     "%s:  SSL2 is not supported",
    90ca4f
    +                                     protocol_marker);
    90ca4f
     #endif
    90ca4f
    -                }
    90ca4f
    -
    90ca4f
    -                if (strstr(lprotocols, "sslv3") != NULL) {
    90ca4f
    -                    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "Enabling SSL3");
    90ca4f
    -                    ssl3 = 1;
    90ca4f
    -                }
    90ca4f
    -
    90ca4f
    -                if (strstr(lprotocols, "tlsv1") != NULL) {
    90ca4f
    -                    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "Enabling TLS");
    90ca4f
    -                    tls = 1;
    90ca4f
    +                    } else if (strcmp(token, "sslv3") == 0) {
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                                     "%s:  Enabling SSL3",
    90ca4f
    +                                     protocol_marker);
    90ca4f
    +                        ssl3 = 1;
    90ca4f
    +                    } else if (strcmp(token, "tlsv1") == 0) {
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                                     "%s:  Enabling TLSv1.0 via TLSv1",
    90ca4f
    +                                     protocol_marker);
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
    90ca4f
    +                                     "%s:  The 'TLSv1' protocol name has been deprecated; please change 'TLSv1' to 'TLSv1.0'.",
    90ca4f
    +                                     protocol_marker);
    90ca4f
    +                        tls = 1;
    90ca4f
    +                    } else if (strcmp(token, "tlsv1.0") == 0) {
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                                     "%s:  Enabling TLSv1.0",
    90ca4f
    +                                     protocol_marker);
    90ca4f
    +                        tls = 1;
    90ca4f
    +                    } else if (strcmp(token, "tlsv1.1") == 0) {
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                                     "%s:  Enabling TLSv1.1",
    90ca4f
    +                                     protocol_marker);
    90ca4f
    +                        tls1_1 = 1;
    90ca4f
    +                    } else {
    90ca4f
    +                        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
    90ca4f
    +                                     "%s:  Unknown protocol '%s' not supported",
    90ca4f
    +                                     protocol_marker, token);
    90ca4f
    +                    }
    90ca4f
                     }
    90ca4f
                 }
    90ca4f
                 free(lprotocols);
    90ca4f
    @@ -686,31 +722,98 @@ static void nss_init_ctx_protocol(server
    90ca4f
             stat = SSL_OptionSet(mctx->model, SSL_ENABLE_SSL2, PR_FALSE);
    90ca4f
         }
    90ca4f
     
    90ca4f
    +    /* Set protocol version ranges:
    90ca4f
    +     *
    90ca4f
    +     *     (1) Set the minimum protocol accepted
    90ca4f
    +     *     (2) Set the maximum protocol accepted
    90ca4f
    +     *     (3) Protocol ranges extend from maximum down to minimum protocol
    90ca4f
    +     *     (4) All protocol ranges are completely inclusive;
    90ca4f
    +     *         no protocol in the middle of a range may be excluded
    90ca4f
    +     *     (5) NSS automatically negotiates the use of the strongest protocol
    90ca4f
    +     *         for a connection starting with the maximum specified protocol
    90ca4f
    +     *         and downgrading as necessary to the minimum specified protocol
    90ca4f
    +     *
    90ca4f
    +     * For example, if SSL 3.0 is chosen as the minimum protocol, and
    90ca4f
    +     * TLS 1.1 is chosen as the maximum protocol, SSL 3.0, TLS 1.0, and
    90ca4f
    +     * TLS 1.1 will all be accepted as protocols, as TLS 1.0 will not and
    90ca4f
    +     * cannot be excluded from this range. NSS will automatically negotiate
    90ca4f
    +     * to utilize the strongest acceptable protocol for a connection starting
    90ca4f
    +     * with the maximum specified protocol and downgrading as necessary to the
    90ca4f
    +     * minimum specified protocol (TLS 1.1 -> TLS 1.0 -> SSL 3.0).
    90ca4f
    +     */
    90ca4f
         if (stat == SECSuccess) {
    90ca4f
    +        /* Set minimum protocol version (lowest -> highest)
    90ca4f
    +         *
    90ca4f
    +         *     SSL 3.0 -> TLS 1.0 -> TLS 1.1
    90ca4f
    +         */
    90ca4f
             if (ssl3 == 1) {
    90ca4f
    -            stat = SSL_OptionSet(mctx->model, SSL_ENABLE_SSL3, PR_TRUE);
    90ca4f
    +            enabledVersions.min = SSL_LIBRARY_VERSION_3_0;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [SSL 3.0] (minimum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
    +        } else if (tls == 1) {
    90ca4f
    +            enabledVersions.min = SSL_LIBRARY_VERSION_TLS_1_0;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [TLS 1.0] (minimum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
    +        } else if (tls1_1 == 1) {
    90ca4f
    +            enabledVersions.min = SSL_LIBRARY_VERSION_TLS_1_1;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [TLS 1.1] (minimum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
             } else {
    90ca4f
    -            stat = SSL_OptionSet(mctx->model, SSL_ENABLE_SSL3, PR_FALSE);
    90ca4f
    +            /* Set default minimum protocol version to SSL 3.0 */
    90ca4f
    +            enabledVersions.min = SSL_LIBRARY_VERSION_3_0;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [SSL 3.0] (default minimum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
             }
    90ca4f
    -    }
    90ca4f
    -    if (stat == SECSuccess) {
    90ca4f
    -        if (tls == 1) {
    90ca4f
    -            stat = SSL_OptionSet(mctx->model, SSL_ENABLE_TLS, PR_TRUE);
    90ca4f
    +
    90ca4f
    +        /* Set maximum protocol version (highest -> lowest)
    90ca4f
    +         *
    90ca4f
    +         *     TLS 1.1 -> TLS 1.0 -> SSL 3.0
    90ca4f
    +         */
    90ca4f
    +        if (tls1_1 == 1) {
    90ca4f
    +            enabledVersions.max = SSL_LIBRARY_VERSION_TLS_1_1;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [TLS 1.1] (maximum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
    +        } else if (tls == 1) {
    90ca4f
    +            enabledVersions.max = SSL_LIBRARY_VERSION_TLS_1_0;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [TLS 1.0] (maximum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
    +        } else if (ssl3 == 1) {
    90ca4f
    +            enabledVersions.max = SSL_LIBRARY_VERSION_3_0;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [SSL 3.0] (maximum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
             } else {
    90ca4f
    -            stat = SSL_OptionSet(mctx->model, SSL_ENABLE_TLS, PR_FALSE);
    90ca4f
    +            /* Set default maximum protocol version to TLS 1.1 */
    90ca4f
    +            enabledVersions.max = SSL_LIBRARY_VERSION_TLS_1_1;
    90ca4f
    +            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    +                         "%s:  [TLS 1.1] (default maximum)",
    90ca4f
    +                         protocol_marker);
    90ca4f
             }
    90ca4f
    +
    90ca4f
    +        stat = SSL_VersionRangeSet(mctx->model, &enabledVersions);
    90ca4f
         }
    90ca4f
     
    90ca4f
         if (stat != SECSuccess) {
    90ca4f
             ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
    90ca4f
    -                "SSL protocol initialization failed.");
    90ca4f
    +                "%s:  SSL/TLS protocol initialization failed.",
    90ca4f
    +                protocol_marker);
    90ca4f
             nss_log_nss_error(APLOG_MARK, APLOG_ERR, s);
    90ca4f
             nss_die();
    90ca4f
         }
    90ca4f
     
    90ca4f
         mctx->ssl2 = ssl2;
    90ca4f
         mctx->ssl3 = ssl3;
    90ca4f
    -    mctx->tls = tls;
    90ca4f
    +    if (tls1_1 == 1) {
    90ca4f
    +        mctx->tls = tls1_1;
    90ca4f
    +    } else {
    90ca4f
    +        mctx->tls = tls;
    90ca4f
    +    }
    90ca4f
     }
    90ca4f
     
    90ca4f
     static void nss_init_ctx_session_cache(server_rec *s,
    90ca4f
    @@ -791,6 +894,8 @@ static void nss_init_ctx_cipher_suite(se
    90ca4f
         PRBool cipher_state[ciphernum];
    90ca4f
         PRBool fips_state[ciphernum];
    90ca4f
         const char *suite = mctx->auth.cipher_suite; 
    90ca4f
    +    char * object_type = NULL;
    90ca4f
    +    char * cipher_suite_marker = NULL;
    90ca4f
         char * ciphers;
    90ca4f
         char * fipsciphers = NULL;
    90ca4f
         int i;
    90ca4f
    @@ -820,6 +925,23 @@ static void nss_init_ctx_cipher_suite(se
    90ca4f
     
    90ca4f
             nss_die();
    90ca4f
         }
    90ca4f
    +
    90ca4f
    +    /*
    90ca4f
    +     * Since this routine will be invoked individually for every thread
    90ca4f
    +     * associated with each 'server' object as well as for every thread
    90ca4f
    +     * associated with each 'proxy' object, identify the cipher suite markers
    90ca4f
    +     * ('NSSCipherSuite' for 'server' versus 'NSSProxyCipherSuite' for 'proxy')
    90ca4f
    +     * via each thread's object type and apply this useful information to
    90ca4f
    +     * all log messages.
    90ca4f
    +     */
    90ca4f
    +    if (mctx == mctx->sc->server) {
    90ca4f
    +        object_type = "server";
    90ca4f
    +        cipher_suite_marker = "NSSCipherSuite";
    90ca4f
    +    } else if (mctx == mctx->sc->proxy) {
    90ca4f
    +        object_type = "proxy";
    90ca4f
    +        cipher_suite_marker = "NSSProxyCipherSuite";
    90ca4f
    +    }
    90ca4f
    +
    90ca4f
         ciphers = strdup(suite);
    90ca4f
     
    90ca4f
     #define CIPHERSIZE 2048
    90ca4f
    @@ -854,13 +976,13 @@ static void nss_init_ctx_cipher_suite(se
    90ca4f
             }
    90ca4f
     
    90ca4f
             ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    -                 "FIPS mode enabled, permitted SSL ciphers are: [%s]",
    90ca4f
    -                 fipsciphers);
    90ca4f
    +            "FIPS mode enabled on this %s, permitted SSL ciphers are: [%s]",
    90ca4f
    +            object_type, fipsciphers);
    90ca4f
         }
    90ca4f
     
    90ca4f
         ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
    90ca4f
    -                "Configuring permitted SSL ciphers [%s]",
    90ca4f
    -                 suite);
    90ca4f
    +                "%s:  Configuring permitted SSL ciphers [%s]",
    90ca4f
    +                 cipher_suite_marker, suite);
    90ca4f
     
    90ca4f
         /* Disable all NSS supported cipher suites. This is to prevent any new
    90ca4f
          * NSS cipher suites from getting automatically and unintentionally
    90ca4f
    @@ -899,7 +1021,7 @@ static void nss_init_ctx_cipher_suite(se
    90ca4f
             for (i=0; i
    90ca4f
                 if (cipher_state[i] == PR_TRUE && fips_state[i] == PR_FALSE) {
    90ca4f
                     ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
    90ca4f
    -                    "Cipher %s is enabled but this is not a FIPS cipher, disabling.", ciphers_def[i].name);
    90ca4f
    +                    "Cipher %s is enabled for this %s, but this is not a FIPS cipher, disabling.", ciphers_def[i].name, object_type);
    90ca4f
                     cipher_state[i] = PR_FALSE;
    90ca4f
                 }
    90ca4f
             }
    90ca4f
    @@ -908,19 +1030,22 @@ static void nss_init_ctx_cipher_suite(se
    90ca4f
         /* See if any ciphers have been enabled for a given protocol */
    90ca4f
         if (mctx->ssl2 && countciphers(cipher_state, SSL2) == 0) {
    90ca4f
             ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
    90ca4f
    -            "SSL2 is enabled but no SSL2 ciphers are enabled.");
    90ca4f
    +            "%s:  SSL2 is enabled but no SSL2 ciphers are enabled.",
    90ca4f
    +            cipher_suite_marker);
    90ca4f
             nss_die();
    90ca4f
         }
    90ca4f
     
    90ca4f
         if (mctx->ssl3 && countciphers(cipher_state, SSL3) == 0) {
    90ca4f
             ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
    90ca4f
    -            "SSL3 is enabled but no SSL3 ciphers are enabled.");
    90ca4f
    +            "%s:  SSL3 is enabled but no SSL3 ciphers are enabled.",
    90ca4f
    +            cipher_suite_marker);
    90ca4f
             nss_die();
    90ca4f
         }
    90ca4f
     
    90ca4f
         if (mctx->tls && countciphers(cipher_state, TLS) == 0) {
    90ca4f
             ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
    90ca4f
    -            "TLS is enabled but no TLS ciphers are enabled.");
    90ca4f
    +            "%s:  TLS is enabled but no TLS ciphers are enabled.",
    90ca4f
    +            cipher_suite_marker);
    90ca4f
             nss_die();
    90ca4f
         }
    90ca4f
     
    90ca4f
    diff -rupN mod_nss-1.0.8.orig/nss_engine_vars.c mod_nss-1.0.8/nss_engine_vars.c
    90ca4f
    --- mod_nss-1.0.8.orig/nss_engine_vars.c	2008-01-03 13:35:28.000000000 -0800
    90ca4f
    +++ mod_nss-1.0.8/nss_engine_vars.c	2012-10-19 17:12:48.178045000 -0700
    90ca4f
    @@ -722,9 +722,13 @@ static char *nss_var_lookup_protocol_ver
    90ca4f
                     case SSL_LIBRARY_VERSION_3_0:
    90ca4f
                         result = "SSLv3";
    90ca4f
                         break;
    90ca4f
    -                case SSL_LIBRARY_VERSION_3_1_TLS:
    90ca4f
    +                case SSL_LIBRARY_VERSION_TLS_1_0:
    90ca4f
    +                    /* 'TLSv1' has been deprecated; specify 'TLSv1.0' */
    90ca4f
                         result = "TLSv1";
    90ca4f
                         break;
    90ca4f
    +                case SSL_LIBRARY_VERSION_TLS_1_1:
    90ca4f
    +                    result = "TLSv1.1";
    90ca4f
    +                    break;
    90ca4f
                 }
    90ca4f
             }
    90ca4f
         }