-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/33620/#review84235
-----------------------------------------------------------



clients/src/main/java/org/apache/kafka/common/network/SSLFactory.java
<https://reviews.apache.org/r/33620/#comment135394>

    On the server, there are actually three settings:
    
      - require client authentication/certificate (wherein the handshake will 
fail if the client doesn't authenticate)
      - want client authentication/certificate (wherein the server will request 
client authentication, but allow the handhsake go through if the client doesn't 
comply)
      - no client certificate/authentication requested (wherein the server 
won't even ask)
    
    Regrettably, the Java Secure Sockets Extensions represents this with two 
boolean parameters: `SSLEngine.setWantClientAuth` and 
`SSLEngine.setNeedClientAuth`. You seem to have adopted their "need client 
authentication" parameter, but not their "want client authentication" 
parameter; is this intentional?



clients/src/main/java/org/apache/kafka/common/network/SSLChannelBuilder.java
<https://reviews.apache.org/r/33620/#comment136154>

    More a question than an issue: do you want `SSLChannelBuilder` to always 
build a client channel?



clients/src/main/java/org/apache/kafka/common/network/SSLFactory.java
<https://reviews.apache.org/r/33620/#comment136157>

    There's a subtle bug here, and I only know about it because we got burned 
by the same thing. Here it is: suppose `needClientAuth` is true, and 
`wantClientAuth` is false. In this case, the code as written will create an 
`SSLEngine` instance with no client auth desired.
    
    Crazy, I know. From the `SSLEngine` javadoc: "An engine's client 
authentication setting is one of the following:
    
      - client authentication required
      - client authentication requested
      - no client authentication desired
    
    ...Calling this method overrides any previous setting made by this method 
or setNeedClientAuth(boolean)."
    
    IOW, the interface to `SSLEngine` models a parameter with three possible 
settings using two booleans. This is a great example of why interface design is 
so important. Anyway, I'd suggest code like this:
    
        if (needClientAuth) {
            sslEngine.setNeedClientAuth(true);
        } else {
            sslEngine.setWantClientAuth(wantClientAuth);
        }
    
    This covers the four cases:
    
    ```
                             "wants"               
                      True           False
                 +-------------+-------------+
            True | client auth | client auth |
                 | required    | required    |
    "needs"      +-------------+-------------+
            False| client auth | no client   |
                 | requested   | auth desired|
                 +-------------+-------------+
    
    ```
    
    Check me, but I think that's what we want here.



clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java
<https://reviews.apache.org/r/33620/#comment136159>

    Two questions:
    
      - is this initialized somewhere?
      - AFAICT it is a copy of the interest operations in the key... so why 
does it exist?
      -



clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java
<https://reviews.apache.org/r/33620/#comment136209>

    Does `appReadBuffer` need to be initialized, too?



clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java
<https://reviews.apache.org/r/33620/#comment136163>

    I'm a bit confused: does line 98 not duplicate the actions of line 96?



clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java
<https://reviews.apache.org/r/33620/#comment136158>

    Typo: than => then



clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java
<https://reviews.apache.org/r/33620/#comment136229>

    Do you ever clear out `appReadBuffer`? As I read through the logic, it 
seems that you keep accumulating unwrapped messages therein during the 
handshake?



clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java
<https://reviews.apache.org/r/33620/#comment136236>

    Do you want to call `compact` on the source buffer?



clients/src/main/java/org/apache/kafka/common/security/auth/PrincipalBuilder.java
<https://reviews.apache.org/r/33620/#comment136240>

    I'm trying to imagine implementing `buildPrincipal` in such a way as to 
make a Principal from information found in the peer's certifcate: how could I 
obtain that? I don't see (immediately) a way to navigate from either the 
`TransportLayer` or the `Authenticator` to the current `SSLSession`...


Wow... this has turned into a major piece of code, hasn't it? Thanks for your 
attention to my comments. I tried to walk through the logic imagining partial 
reads & partial writes, but I think only found a few corner cases.

- Michael Herstine


On May 21, 2015, 5:37 p.m., Sriharsha Chintalapani wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/33620/
> -----------------------------------------------------------
> 
> (Updated May 21, 2015, 5:37 p.m.)
> 
> 
> Review request for kafka.
> 
> 
> Bugs: KAFKA-1690
>     https://issues.apache.org/jira/browse/KAFKA-1690
> 
> 
> Repository: kafka
> 
> 
> Description
> -------
> 
> KAFKA-1690. new java producer needs ssl support as a client.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. SSLFactory tests.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. Added 
> PrincipalBuilder.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. Addressing 
> reviews.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. Addressing 
> reviews.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. Addressing 
> reviews.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. Fixed minor 
> issues with the patch.
> 
> 
> KAFKA-1690. new java producer needs ssl support as a client. Fixed minor 
> issues with the patch.
> 
> 
> Diffs
> -----
> 
>   build.gradle cd2aa838fd53e8124f308979b1d70efe0c5725a6 
>   checkstyle/import-control.xml f2e6cec267e67ce8e261341e373718e14a8e8e03 
>   clients/src/main/java/org/apache/kafka/clients/ClientUtils.java 
> 0d68bf1e1e90fe9d5d4397ddf817b9a9af8d9f7a 
>   clients/src/main/java/org/apache/kafka/clients/consumer/ConsumerConfig.java 
> bdff518b732105823058e6182f445248b45dc388 
>   clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java 
> d301be4709f7b112e1f3a39f3c04cfa65f00fa60 
>   clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java 
> 8e336a3aa96c73f52beaeb56b931baf4b026cf21 
>   clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 
> 187d0004c8c46b6664ddaffecc6166d4b47351e5 
>   clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java 
> c4fa058692f50abb4f47bd344119d805c60123f5 
>   clients/src/main/java/org/apache/kafka/common/config/SecurityConfigs.java 
> PRE-CREATION 
>   clients/src/main/java/org/apache/kafka/common/network/Authenticator.java 
> PRE-CREATION 
>   clients/src/main/java/org/apache/kafka/common/network/Channel.java 
> PRE-CREATION 
>   clients/src/main/java/org/apache/kafka/common/network/ChannelBuilder.java 
> PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/network/DefaultAuthenticator.java
>  PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/network/PlainTextChannelBuilder.java
>  PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/network/PlainTextTransportLayer.java
>  PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/network/SSLChannelBuilder.java 
> PRE-CREATION 
>   clients/src/main/java/org/apache/kafka/common/network/SSLFactory.java 
> PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/network/SSLTransportLayer.java 
> PRE-CREATION 
>   clients/src/main/java/org/apache/kafka/common/network/Selectable.java 
> b5f8d83e89f9026dc0853e5f92c00b2d7f043e22 
>   clients/src/main/java/org/apache/kafka/common/network/Selector.java 
> 57de0585e5e9a53eb9dcd99cac1ab3eb2086a302 
>   clients/src/main/java/org/apache/kafka/common/network/TransportLayer.java 
> PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/protocol/SecurityProtocol.java 
> dab1a94dd29563688b6ecf4eeb0e180b06049d3f 
>   
> clients/src/main/java/org/apache/kafka/common/security/auth/DefaultPrincipalBuilder.java
>  PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/security/auth/KafkaPrincipal.java
>  PRE-CREATION 
>   
> clients/src/main/java/org/apache/kafka/common/security/auth/PrincipalBuilder.java
>  PRE-CREATION 
>   clients/src/main/java/org/apache/kafka/common/utils/Utils.java 
> f73eedb030987f018d8446bb1dcd98d19fa97331 
>   clients/src/test/java/org/apache/kafka/common/network/EchoServer.java 
> PRE-CREATION 
>   clients/src/test/java/org/apache/kafka/common/network/SSLFactoryTest.java 
> PRE-CREATION 
>   clients/src/test/java/org/apache/kafka/common/network/SSLSelectorTest.java 
> PRE-CREATION 
>   clients/src/test/java/org/apache/kafka/common/network/SelectorTest.java 
> d5b306b026e788b4e5479f3419805aa49ae889f3 
>   clients/src/test/java/org/apache/kafka/common/utils/UtilsTest.java 
> 2ebe3c21f611dc133a2dbb8c7dfb0845f8c21498 
>   clients/src/test/java/org/apache/kafka/test/TestSSLUtils.java PRE-CREATION 
> 
> Diff: https://reviews.apache.org/r/33620/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Sriharsha Chintalapani
> 
>

Reply via email to