Spring   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java – 支持多种TLS协议的HttpClient大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我们正在编写一个必须使用httpS与几台服务器通信的应用程序.
它需要与AWS(使用AWS库)以及使用TLS 1.2的一些内部服务进行通信.

我开始通过更改我的httpClient来使用TLS 1.2 SSLContext:

public static scheR_147_11845@eRegistry buildscheR_147_11845@eRegistry() throws Exception {
    final SSLContext sslContext = SSLContext.geTinstance("TLSv1.2");
    sslContext.init(createKeymanager(),createTrustManager(),new SecureRandom());
    final scheR_147_11845@eRegistry scheR_147_11845@eRegistry = new scheR_147_11845@eRegistry();
    scheR_147_11845@eRegistry.register(new scheR_147_11845@e("https",443,new SSLSocketFactory(sslContext)));
    return scheR_147_11845@eRegistry;
}

并将此scheR_147_11845@eRegistry注入到DefaulthttpClient对象中(通过spring),但这样做我从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.

如果我尝试在spring中定义两个httpClient,一个使用TLS 1.2,一个认值,我得到以下错误,我认为这意味着Spring不喜欢实例化并自动装配两个httpClient对象:

SEVERE: Servlet /my-refsvc threw load() exception
java.lang.NullPointerException
at com.company.project.refsvc.base.httpsClientFactory.beanfactory.instantiateUsingFactorymethod(AbstractAutowireCapablebeanfactory.java:1031)
at 
...
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)

我没有在java中使用过多的httpS,所以请问有什么人给我一些建议吗?
1)我如何让Spring允许两个httpClient对象,一个连接到AWS东西bean,另一个连接到其他bean以访问TLS1.2服务
2)或者是否可以更改一个httpClient对象以便能够尝试TLS1.2(通过SSLContext或scheR_147_11845@eRegistry或其他东西),如果失败则尝试TLS1.1或1.0?
3)如果两者都有可能,那么“更好”的做法是什么?

最佳答案
TLS有一个内置机制来协商使用哪个版本的协议.从RFC 5246 (Appendix E)开始:

此外,更改SSLContext.geTinstance(…)中的版本号仅会更改认情况下启用的协议.设置实际协议版本的方法是使用SSLSocket.setEnabledProtocols(...)(参见this question).我不确定你正在使用的其他库,但它可能会在某处设置启用的协议.

有几种可能性:

>您在createKeymanager()中执行的操作与认行为不同.如果服务使用客户端证书身份验证,配置错误肯定会导致403错误.
>(不太可能,我猜,但很难说没有看到你的createKeymanager()和createTrustManager()).您使用的服务器可能与TLS 1.2和版本协商机制不兼容. sun.security.ssl.SSLContextImpl中有此评论

大佬总结

以上是大佬教程为你收集整理的java – 支持多种TLS协议的HttpClient全部内容,希望文章能够帮你解决java – 支持多种TLS协议的HttpClient所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。