2014-10-17 18:32 GMT+04:00 Christopher Schultz <ch...@christopherschultz.net>:
> Konstantin,
>
> On 10/17/14 10:09 AM, Konstantin Kolinko wrote:
>> 2014-10-17 17:59 GMT+04:00 Christopher Schultz 
>> <ch...@christopherschultz.net>:
>>> All,
>>>
>>> On 10/17/14 9:52 AM, schu...@apache.org wrote:
>>>> Author: schultz
>>>> Date: Fri Oct 17 13:52:24 2014
>>>> New Revision: 1632577
>>>>
>>>> URL: http://svn.apache.org/r1632577
>>>> Log:
>>>> Maintain SSL_OP parity with OpenSSL: add SSL_OP_NO_TLSv1_1 and 
>>>> SSL_OP_NO_TLSv1_2.
>>>>
>>>> Modified:
>>>>     tomcat/trunk/java/org/apache/tomcat/jni/SSL.java
>>>>
>>>> Modified: tomcat/trunk/java/org/apache/tomcat/jni/SSL.java
>>>> URL: 
>>>> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/jni/SSL.java?rev=1632577&r1=1632576&r2=1632577&view=diff
>>>> ==============================================================================
>>>> --- tomcat/trunk/java/org/apache/tomcat/jni/SSL.java (original)
>>>> +++ tomcat/trunk/java/org/apache/tomcat/jni/SSL.java Fri Oct 17 13:52:24 
>>>> 2014
>>>> @@ -135,6 +135,9 @@ public final class SSL {
>>>>      public static final int SSL_OP_NO_SSLv2                         = 
>>>> 0x01000000;
>>>>      public static final int SSL_OP_NO_SSLv3                         = 
>>>> 0x02000000;
>>>>      public static final int SSL_OP_NO_TLSv1                         = 
>>>> 0x04000000;
>>>> +    public static final int SSL_OP_NO_TLSv1_1                       = 
>>>> 0x08000000;
>>>> +    public static final int SSL_OP_NO_TLSv1_2                       = 
>>>> 0x10000000;
>>>> +
>>>>      public static final int SSL_OP_NO_TICKET                        = 
>>>> 0x00004000;
>>>
>>> I just noticed that this conflicts with the SSL_OPs defined just below
>>> these in SSL.java:
>>>
>>>>     /* The next flag deliberately changes the ciphertest, this is a check
>>>>      * for the PKCS#1 attack */
>>>>     public static final int SSL_OP_PKCS1_CHECK_1                    = 
>>>> 0x08000000;
>>>>     public static final int SSL_OP_PKCS1_CHECK_2                    = 
>>>> 0x10000000;
>>>
>>> At some point (1.0, I think), OpenSSL deprecated the PKCS1 constants,
>>> made their values 0x0, and re-purposed the flag values for the TLSv1_1
>>> and TLSv1_2 options shown above.
>>>
>>> Without checking the OpenSSL version, client code will have no way of
>>> knowing whether they are checking for the TLSv1_x or PKCS1 SSL_OP flags,
>>> especially if the Java code has been compiled against a prior version of
>>> SSL.java (because javac stupidly copies constant values from one class
>>> to another instead of looking them up at runtime, at least the last time
>>> I checked).
>>>
>>> What should we do, here? We can make those constants dynamic, but then
>>> we have to do the OpenSSL library load in the class's static initializer
>>> instead of in APRLifecycleListener.
>>>
>>> We could remove SSL_OP_PKCS1_CHECK but then that means anyone relying on
>>> it for use with OpenSSL 0.9.8* might be out of luck.
>>>
>>> I'm a bit nervous about picking a winner here between OpenSSL 0.9.8 and
>>> 1.0.1.
>>>
>>> Any thoughts?
>>>
>>
>>
>> I think just mark them as @Deprecated as "Not defined in OpenSSL 1.x",
>> "Removed since OpenSSL 1.0" or "Have different values in different
>> OpenSSL versions".
>>
>> Tomcat code does not use them.
>
> Thanks for the review. Shall I change the values for the PKCS constants
> to be 0x0 to match OpenSSL 1.0+, or leave them with their current values?

I would leave them as is.  Those are historical values and have no
meaning for the current OpenSSL (according to your description).

Best regards,
Konstantin Kolinko

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

Reply via email to