Raghav,

If you send me the full command sequence, I can take a look. Also, which
JRE are you using?

Regards,

Rajini

On Thu, May 18, 2017 at 12:19 PM, Raghav <raghavas...@gmail.com> wrote:

> Rajini
>
> I just tried this. It turns out that I can't import cert-file by itself in
> trust store until it is signed by a CA. Could be because of the format ?
> Any idea here ...
>
> In the above steps, if I sign the server-cert-file and client-cert-file by
> a private CA then I can add them to trust store and key store. In this
> test, I did not add the CA cert in either keystone or trust store.
>
> Thanks for all your help.
>
>
>
>
> On Thu, May 18, 2017 at 8:26 AM, Rajini Sivaram <rajinisiva...@gmail.com>
> wrote:
>
>> Raghav,
>>
>> Perhaps what you want to do is:
>>
>> *You do (for the brokers):*
>>
>> Generate key-pair for broker:
>>
>> keytool -keystore kafka.server.keystore.jks -alias localhost -validity
>> 365 -genkey
>>
>> Export certificate to a file to send to your customers:
>>
>> keytool -exportcert -file server-cert-file -keystore
>> kafka.server.keystore.jks -alias localhost
>>
>>
>> And you send server-cert-file to your customers.
>>
>> Once you get your customer's client-cert-file, you do:
>>
>> keytool -importcert -file client-cert-file -keystore
>> kafka.server.truststore.jks -alias customerA
>>
>> If you are using SSL for inter-broker communication, your broker
>> certificate also needs to be in the server truststore:
>>
>> keytool -importcert -file server-cert-file -keystore
>> kafka.client.truststore.jks -alias broker
>>
>>
>> *Your customers do (for the clients):*
>>
>> Generate key-pair for client:
>>
>> keytool -keystore kafka.client.keystore.jks -alias localhost -validity
>> 365 -genkey
>>
>> Export certificate to a file to send to to you:
>>
>> keytool -exportcert -file client-cert-file -keystore
>> kafka.client.keystore.jks -alias localhost
>>
>>
>> Your customers send you their client-cert-file
>>
>> Your customers create their truststore using the broker certificate
>> server-cert-file that you send to them:
>>
>> keytool -importcert -file server-cert-file -keystore
>> kafka.client.truststore.jks -alias broker
>>
>>
>>
>> You then configure your brokers with (kafka.server.keystore.jks, ka
>> fka.server.truststore.jks).Your customers configure their clients with (
>> kafka.client.keystore.jks, kafka.client.truststore.jks).
>>
>>
>> Hope that helps.
>>
>> Regards,
>>
>> Rajini
>>
>>
>>
>> On Thu, May 18, 2017 at 10:33 AM, Raghav <raghavas...@gmail.com> wrote:
>>
>>> Rajini,
>>>
>>> Sure, will submit a PR shortly.
>>>
>>> Your answer is very helpful, but I think I did not put the question
>>> correctly. Pardon my ignore but I am still trying to get my ways around
>>> Kafka security.
>>>
>>> I was trying to understand, can we (Kafka Broker) just add the
>>> certificate (unsigned or signed) from customer to our trust store without
>>> adding the CA cert to trust store... could that work ?
>>>
>>> 1. Let's say Kafka broker (there is only 1 for simplicity) generates a
>>> keystore and generates a key using the command below
>>>
>>> keytool -keystore kafka.server.keystore.jks -alias localhost -validity 
>>> *365* -genkey
>>>
>>> keytool -keystore kafka.server.keystore.jks -alias localhost -certreq -file 
>>> server-cert-file
>>>
>>> 2. Similarly, Kafka Client (Producer) does the same
>>>
>>> keytool -keystore kafka.client.keystore.jks -alias localhost -validity 
>>> *365* -genkey
>>>
>>> keytool -keystore kafka.client.keystore.jks -alias localhost -certreq -file 
>>> client-cert-file
>>>
>>>
>>> 3. Now, we add *client-cert-file* into the trust store of server, and
>>> *server-cert-file* into the trust store of client. Given that each
>>> trust store has other party's certificate in their trust store, does CA
>>> certificate come into the picture ?
>>>
>>> On Thu, May 18, 2017 at 6:26 AM, Rajini Sivaram <rajinisiva...@gmail.com
>>> > wrote:
>>>
>>>> Raghav,
>>>>
>>>> Yes, you can create a truststore with your customers' certificates and
>>>> vice-versa. It will be best to give your CA certificate to your customers
>>>> and get the CA certificate from each of your customers and add them to your
>>>> broker's truststore. You can both then create additional certificates if
>>>> you need without any changes to your truststore as long as the CA
>>>> certificates are valid. Unlike certificates signed by a trusted authority,
>>>> you will need to add the CAs of every customer to your truststore. Kafka
>>>> brokers don't reload certificates, so if you wanted to add another
>>>> customer's certificate to your truststore, you will need to restart your
>>>> broker.
>>>>
>>>> Would you like to submit a PR with the information that is missing in
>>>> the Apache Kafka documentation that you think may be useful?
>>>>
>>>> Regards,
>>>>
>>>> Rajini
>>>>
>>>> On Wed, May 17, 2017 at 6:21 PM, Raghav <raghavas...@gmail.com> wrote:
>>>>
>>>>> Another quick question:
>>>>>
>>>>> Say we chose to add our customer's certificates directly to our
>>>>> brokers trust store and vice verse, could that work ? There is no
>>>>> documentation on Kafka or Confluent site for this ?
>>>>>
>>>>> Thanks.
>>>>>
>>>>>
>>>>> On Wed, May 17, 2017 at 1:56 PM, Rajini Sivaram <
>>>>> rajinisiva...@gmail.com> wrote:
>>>>>
>>>>>> Raghav,
>>>>>>
>>>>>> 1. Yes, your customers can use certificates signed by a trusted
>>>>>> authority. You can simply omit the truststore configuration for your 
>>>>>> broker
>>>>>> in server.properties, and Kafka would use the default, which will trust 
>>>>>> the
>>>>>> client certificates. If your brokers are using SSL for inter-broker
>>>>>> communication and you are still using your private CA for broker's
>>>>>> keystore, then you will need two separate endpoints in your listener
>>>>>> configuration, one for your customer's clients and another for 
>>>>>> inter-broker
>>>>>> communication so that you can specify a truststore with your private
>>>>>> ca-cert for your broker connections.
>>>>>>
>>>>>> 2. Yes, all the commands can specify password on the command line, so
>>>>>> you should be able to generate all the stores using a script without any
>>>>>> interactions.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Rajini
>>>>>>
>>>>>>
>>>>>> On Wed, May 17, 2017 at 2:49 PM, Raghav <raghavas...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> One follow up questions Rajini:
>>>>>>>
>>>>>>> 1. Can we use some other mechanism like have our customer's use a
>>>>>>> well known CA which JKS understands, and in that case we don't have to 
>>>>>>> ask
>>>>>>> our customers to do this certificate-in and certificate-out thing ? I am
>>>>>>> just trying to understand if we can make our customer's workflow easier.
>>>>>>> Anything else that you can suggest here....
>>>>>>>
>>>>>>> 2. Can we automate the key gen steps mentioned on apache website and
>>>>>>> adding to keystone and trust store so that we don't have to manually 
>>>>>>> supply
>>>>>>> password ? Currently, everytime I tried to do steps mentioned in
>>>>>>> https://kafka.apache.org/documentation/#security I have to manually
>>>>>>> give password. It would be great if we can automate this process either
>>>>>>> through script or Java code. Any suggestions ...
>>>>>>>
>>>>>>>
>>>>>>> Many thanks.
>>>>>>>
>>>>>>> On Tue, May 16, 2017 at 10:58 AM, Raghav <raghavas...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Many thanks, Rajini.
>>>>>>>>
>>>>>>>> On Tue, May 16, 2017 at 8:43 AM, Rajini Sivaram <
>>>>>>>> rajinisiva...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Raghav,
>>>>>>>>>
>>>>>>>>> If your Kafka broker is configured with
>>>>>>>>> *ssl.client.auth=required,* your customer's clients need to
>>>>>>>>> provide a keystore. In any case, they need a truststore since your 
>>>>>>>>> broker
>>>>>>>>> is using SSL. For the truststore, you can given them ca-cert, as
>>>>>>>>> you mentioned. Client keystore contains a certificate and a private 
>>>>>>>>> key.
>>>>>>>>>
>>>>>>>>> In the round-trip you described, customers generate the keys and
>>>>>>>>> give you the certificate signing request, keeping their private key
>>>>>>>>> private. You then send them back a signed certificate that goes into 
>>>>>>>>> their
>>>>>>>>> keystore. This is the standard way of signing and is secure.
>>>>>>>>>
>>>>>>>>> In the single step scenario that you described, you generate the
>>>>>>>>> customer's key-pair consisting of certificate and private key. You 
>>>>>>>>> then
>>>>>>>>> need to send them both the signed certificate and the private key. 
>>>>>>>>> This is
>>>>>>>>> less secure. Unlike the round-trip, you now have the private key of 
>>>>>>>>> the
>>>>>>>>> customer.
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>>
>>>>>>>>> Rajini
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, May 16, 2017 at 10:47 AM, Raghav <raghavas...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Rajini
>>>>>>>>>>
>>>>>>>>>> This was very helpful. I have another questions on similar lines.
>>>>>>>>>>
>>>>>>>>>> We host Kafka Broker, and we also have our own private CA. We
>>>>>>>>>> want our customers to setup their Kafka Clients (Producer and 
>>>>>>>>>> Consumer)
>>>>>>>>>> using SSL using *ssl.client.auth=required*.
>>>>>>>>>>
>>>>>>>>>> Is there a way, we can generate certificate for our clients, sign
>>>>>>>>>> it using our private CA, and then hand over our customers these  two
>>>>>>>>>> certificates (1. ca-cert 2. cert-signed), which if they add to their
>>>>>>>>>> keystroke and truststore, they can send message to our Kafka brokers 
>>>>>>>>>> while
>>>>>>>>>> keeping *ssl.client.auth=required*.
>>>>>>>>>>
>>>>>>>>>> We are looking to minimize our customer's pre-setup steps. For
>>>>>>>>>> example in normal scenario, customers will need to generate 
>>>>>>>>>> certificate,
>>>>>>>>>> and hand over their certificate request to our private CA, which we 
>>>>>>>>>> then
>>>>>>>>>> sign it, and send them signed certificate and private CA's 
>>>>>>>>>> certificate. So
>>>>>>>>>> there is one round trip. Just wondering if we can reduce this 2 step 
>>>>>>>>>> into 1
>>>>>>>>>> step.
>>>>>>>>>>
>>>>>>>>>> Thanks.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, May 12, 2017 at 8:53 AM, Rajini Sivaram <
>>>>>>>>>> rajinisiva...@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Raqhav,
>>>>>>>>>>>
>>>>>>>>>>> 1. Clients need a keystore if you are using TLS client
>>>>>>>>>>> authentication. To
>>>>>>>>>>> enable client authentication, you need to configure
>>>>>>>>>>> ssl.client.auth in
>>>>>>>>>>> server.properties. This can be set to required|requested|none.
>>>>>>>>>>> If you don't
>>>>>>>>>>> enable client authentication, any client will be able to connect
>>>>>>>>>>> to your
>>>>>>>>>>> broker. You could alternatively use SASL for client
>>>>>>>>>>> authentication.
>>>>>>>>>>> .
>>>>>>>>>>> 2. Client keystore is mandatory if ssl.client.auth=required,
>>>>>>>>>>> optional for
>>>>>>>>>>> requested and not used for none. The truststore configured on
>>>>>>>>>>> the client is
>>>>>>>>>>> used to authenticate the server. So you have to provide it
>>>>>>>>>>> unless your
>>>>>>>>>>> broker is using certificates signed by a trusted authority.
>>>>>>>>>>>
>>>>>>>>>>> Hope that helps.
>>>>>>>>>>>
>>>>>>>>>>> Rajini
>>>>>>>>>>>
>>>>>>>>>>> On Fri, May 12, 2017 at 11:35 AM, Raghav <raghavas...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> > Hi
>>>>>>>>>>> >
>>>>>>>>>>> > I read the documentation here:
>>>>>>>>>>> > https://kafka.apache.org/documentation/#security_ssl
>>>>>>>>>>> >
>>>>>>>>>>> > I have few questions about trust store and keystore based on
>>>>>>>>>>> this scenario:
>>>>>>>>>>> >
>>>>>>>>>>> > We have 5 Kafka Brokers in our cluster. We want our clients to
>>>>>>>>>>> write to our
>>>>>>>>>>> > Kafka brokers in a secure way. Suppose, we also host a private
>>>>>>>>>>> CA as
>>>>>>>>>>> > mentioned in the documentation above, and provide our clients
>>>>>>>>>>> the *ca-cert*
>>>>>>>>>>> > file, which they add it to their trust store.
>>>>>>>>>>> >
>>>>>>>>>>> > 1. Do we require our clients to generate their certificate and
>>>>>>>>>>> have it
>>>>>>>>>>> > signed by our private CA, and add it to their keystore?
>>>>>>>>>>> >
>>>>>>>>>>> > 2. When is keystore used by clients, and when is truststore
>>>>>>>>>>> used by clients
>>>>>>>>>>> > ?
>>>>>>>>>>> >
>>>>>>>>>>> >
>>>>>>>>>>> > Thanks.
>>>>>>>>>>> >
>>>>>>>>>>> > --
>>>>>>>>>>> > R
>>>>>>>>>>> >
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Raghav
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Raghav
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Raghav
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Raghav
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Raghav
>>>
>>
>>
>
>
> --
> Raghav
>

Reply via email to