For those who like code...

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, null, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

Look ma.. no guice.. no jclouds for that matter either.

We shouldn't block the release; we've already squandered enough time
on this one.
-A

http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HttpsURLConnection.html#setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory)http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HttpsURLConnection.html#setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory)

On Mon, Oct 20, 2014 at 5:11 PM, Adrian Cole <adrian.f.c...@gmail.com> wrote:
> PS as I certainly got into the weeds, just there.. will clarify,
> especially as gaul raised valid points.
>
> 1. I think the proposed fix is distracting, so wouldn't hold back a
> release on that.
> 2. I don't think it would harm many, if any, if we told folks how to
> change jclouds to not use ssl v3
> 3. I suggested a patch, because I think that we shouldn't hold users
> who care about poodle hostage to 1.8.1
>
> ...but..
>
> I think this should also work
>
> HttpsURLConnection.setDefaultSSLSocketFactory(patchedOne)
>
> This is probably a better quick fix, since it involves no guice. Not
> involving guice means we can reorganize a better long-term solution,
> and hopefully make test cases to prove it for all http drivers.
>
> -A
>
> On Mon, Oct 20, 2014 at 4:57 PM, Adrian Cole <adrian.f.c...@gmail.com> wrote:
>> Right. So, I think the safest way is to provide the information to
>> those who wish to patch for poodle. This limits scope of the change to
>> those interested in it, and also fixes those who aren't ready to
>> switch to 1.8.1
>>
>> They would do this.
>>
>> contextBuilder.modules(..., new AbstractModule() {
>>   @Override public void configure(){}
>>   @Provides @Singleton Supplier<SSLContext> unpoodled() {
>>     return // favorite thing.
>>   });
>>
>> done. Problem answered.. scope limited.
>>
>> We then have bought time to think it through a bit. For example, we
>> may want to restructure how the ssl contexts are passed around, or
>> address other http clients in a consistent way such that client auth
>> based apis can still work. (ex. maybe contextBuilder.sslProtocols)
>>
>> -A
>>
>> ----longer part---
>>
>>
>> Apache hc was written not knowing that the default executor does this.
>>
>> @Inject(optional = true)
>> protected Supplier<SSLContext> sslContextSupplier;
>>
>> https://github.com/jclouds/jclouds/blob/master/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java#L80
>>
>> It started doing that because of FCGP.. Only other api that does
>> something similar is azurecompute. These two modify the default ssl
>> context to allow client auth and if they can't, bad things happen. It
>> interestingly becomes the case that we need to modify the default ssl
>> context as a part of addressing poodle!
>>
>> So, considering most folks don't install apachehc, we could defer
>> addressing that, or otherwise hardcoding it. We could suggest that the
>> most immediate fix (one that won't break any non-labs stuff), is to
>> make this patch.
>>
>> contextBuilder.modules(..., new AbstractModule() {
>>   @Override public void configure(){}
>>   @Provides @Singleton Supplier<SSLContext> unpoodled() {
>>     return // favorite thing.
>>   });
>>
>> This will work for those who must change it, regardless of 1.8.1 or
>> not, since all asf releases have the optionally injected ssl context
>> supplier.
>>
>> Also, this limits risk only to those who install it. Remember that
>> private cloud may not even run TLS stacks, even if it "should". It
>> would totally suck to break folks running tests, etc. if we have a
>> choice. Now, since we do know which clouds are "providers" we could
>> auto-fix all public cloud services. Just saying that it isn't the case
>> that every enterprise will patch all internal servers.
>>
>> WRT "untrusted" I think it confuses things to patch poodle, yet trust
>> all certs :) That's why I suggest rolling back that part.
>>
>> On Mon, Oct 20, 2014 at 10:27 AM, Andrew Phillips <aphill...@qrmedia.com> 
>> wrote:
>>>> Don't mess with the untrusted one. Fix apachehc later.
>>>
>>>
>>> To be clear: by this, you mean *don't* go for the change in SSLModule in
>>> [1]? As far as I understand the code, that is also the "untrusted" context
>>> used in ApacheHC - the one that's being modified in [1] is in case the user
>>> is *not* looking to trust all certs [2].
>>>
>>> ap
>>>
>>> [1] https://github.com/jclouds/jclouds/pull/575/files
>>> [2]
>>> https://github.com/jclouds/jclouds/blob/enforce-tls/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/config/ApacheHCHttpCommandExecutorServiceModule.java#L114-L119

Reply via email to