HttpClient с поддержкой нескольких протоколов TLS

Мы пишем приложение, которое должно взаимодействовать с несколькими серверами, используя HTTPS. Он должен взаимодействовать с AWS (используя библиотеки AWS), а также с некоторыми из наших внутренних служб, использующих TLS 1.2.

Я начал с изменения моего HttpClient для использования TLS 1.2 SSLContext:

public static SchemeRegistry buildSchemeRegistry() throws Exception {
    final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init(createKeyManager(), createTrustManager(), new SecureRandom());
    final SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("https", 443, new SSLSocketFactory(sslContext)));
    return schemeRegistry;
}

и добавление этого SchemeRegistry в объект DefaultHttpClient (через пружину), но при этом я получаю ошибки от AWS, и поэтому я предполагаю (я могу ошибаться), что AWS не поддерживает TLS 1.2 (я не получаю это сообщение, если я просто используйте обычный DefaultHttpClient):

AmazonServiceException: Status Code: 403, AWS Service: AmazonSimpleDB, AWS Request ID: 5d91d65f-7158-91b6-431d-56e1c76a844c, AWS Error Code: InvalidClientTokenId, AWS Error Message: The AWS Access Key Id you provided does not exist in our records.

Если я пытаюсь создать два HttpClient, определенных весной, один из которых использует TLS 1.2, а другой - по умолчанию, я получаю следующую ошибку, которая, как я предполагаю, означает, что Spring не любит создавать экземпляры и автоматически подключать два объекта HttpClient:

SEVERE: Servlet /my-refsvc threw load() exception
java.lang.NullPointerException
at com.company.project.refsvc.base.HttpsClientFactory.<clinit>(BentoHttpsClientFactory.java:25)
...
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1031)
at 
...
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)

Я не очень часто использовал HTTPS в Java, так что вы могли бы дать мне несколько добрых советов, пожалуйста? 1) Как заставить Spring разрешить два объекта HttpClient и один для подключения к компонентным компонентам AWS, а другой - к другим компонентам для доступа к службам TLS1.2 2) Или можно изменить один HttpClient объект, чтобы иметь возможность попробовать TLS1.2 (через SSLContext, или SchemeRegistry или что-то), и если это не удается, то попробуйте TLS1.1 или 1.0? 3) Если оба варианта возможны, каков будет «лучший» способ сделать это?

Ответы на вопрос(1)

Ваш ответ на вопрос