Re: Support for cert auth in JDBC - Mailing list pgsql-jdbc

From Marc-André Laverdière
Subject Re: Support for cert auth in JDBC
Date
Msg-id 4DD4D0B0.5040000@atc.tcs.com
Whole thread Raw
In response to Re: Support for cert auth in JDBC  (Craig Ringer <craig@postnewspapers.com.au>)
Responses Re: Support for cert auth in JDBC
List pgsql-jdbc
That's good changes.
I'm not super keen on the idea of asking the user of providing the type.
But I'm not gonna fight over that :)

Now, would you please elaborate on those todos?

Also, methinks the @author tag at the top needs an extra line as follows:
@author Craig Ringer (craig@postnewspapers.com.au)

Marc-André Laverdière
Software Security Scientist
Innovation Labs, Tata Consultancy Services
Hyderabad, India

On Thursday 19 May 2011 12:57 PM, Craig Ringer wrote:
> Thanks for those changes. Comments follow.
>
> I'm attaching a further-tweaked version of the code you just sent. I
> only had to change AbstractCertAuthFactory, so the other files remain
> unaltered. Changes are:
>
> - Only attempt to autodetect keystore type when null keystore type was
>   passed, instead of always accepting but ignoring the keystore type
>   argument.
>
> - Make string constants private so nobody lands up relying on them
>   so they can't be changed without breaking backward compat.
>
> - Make "internal helper only" methods private. If they're protected,
>   they're API not internal helpers.
>
> Reasonable?
>
> See further comments inline below:
>
> On 05/19/2011 02:41 PM, Marc-André Laverdière wrote:
>
>> There was a tiny bug in SysPropCertAuthFactory whereas a path was sent
>> instead of a password. I'm attaching the fix.
>
> Whoops. Thanks.
>
>> Thanks for the changes. It is a good step forward in terms of
>> extensibility. That being said, I think we could just put a lot of the
>> loading code in AbstractCertAuthFactory, so that it is more reusable.
>
> I thought it was, as much as already possible. What more would you move
> into AbstractCertAuthFactory ? Or do you want to create a single helper
> method that takes something like:
>
> initFactory(
>   String ksPath, char[] ksPass, char[] keyPass,
>   String tsPath, char[] tsPass)
>
> to reduce verbosity, one that uses the existing buildSSLSocketFactory(),
> createKeyManagers() and createTrustManagers() behind the scenes?
>
> To me, it seems a pretty small thing to have to call createKeyManagers
> and createTrustManagers and pass the args to buildSSLSocketFactory(...).
>
> I did intentionally move the checks for null/empty keystore path and
> truststore path out of AbstractCertAuthFactory and into
> SysPropCertAuthFactory. It's already possible to say "use system
> default" by passing null to buildSSLSocketFactory(...), so I don't think
> createKeyManagers(..) or createTrustManagers() should be making that
> decision implicitly for the caller. In security, it might be quite
> undesirable to have the app fail silently back to the system truststore
> - you might have good reasons to have specified your own.
>
> I can see that it's necessary to treat a missing key as "use default"
> when using system properties as a configuration mechanism, but don't
> think that should be an assumption that AbstractCertAuthFactory makes
> for all users of that code.
>
>> I also added the code that allows to load both PKCS12 and JKS blindly. I
>> think that we can remove the property for specifying the type. I  doubt
>> we have to worry about other types of keystores than those two.
>
> JECKS is also common.
>
> I don't love this part - it's making assumptions that may not prove true
> in the long run, and IOException is a very broad exception to rely on to
> detect a very specific thing like wrong keystore format. It could
> potentially result in confusing error messages, too. For example, a
> corrupt or damaged JKS keystore might fail to load with an error
> reporting that a "pkcs12 keystore could not be read", causing the user
> to wonder why the S@#$@ the code was trying to read it as PKCS#12 and
> not identify the real problem, that it tried JKS first and failed
> because the keystore was damaged.
>
> It seems OK to me to attempt to auto-detect the keystore type when no
> keystore type is given. The code you posted _ignores_ the keystore type
> argument. If a non-null keystore type is passed it should be honoured,
> but if a null keystore type is passed then I think it's fine to try to
> detect it rather than blindly assuming KeyStore.getDefaultType() .
>
> --
> Craig Ringer
>
>
>
>

pgsql-jdbc by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Support for cert auth in JDBC
Next
From: Craig Ringer
Date:
Subject: Re: Support for cert auth in JDBC