背景
在某些特殊的项目中虽然使用了HTTPS,但其证书管理又不是采用常规模式,如服务端用了个自签名的证书。
很多组织的内部项目因为各种原因采用了这种方式。(先不深挖这种模式的利弊)
这种情况下,大多数HTTP客户端工具或框架都默认禁止此类证书。
为了让客户端忽略SSL证书校验,需要额外的客户端代码设置。
实现方式
本文针对两种Java常见HTTP客户端请求方式,提供实现样例。
HttpClient(org.apache.http.client)
简单直接的方式
SSLContext sslContext = SSLContextBuilder.create() .loadTrustMaterial((chain, authType) -> true) .build(); HttpClient httpClient = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build();
复杂的方式——更多自定义配置
HttpClient只是个Interface,这里可自定义的内容非常多。
如,我们可以通过工具类 HttpClientBuilder 来设置各种细节,最终构建出一个 HttpClient。
此处仅提供一些简单的示例。真实项目中需具体问题具体分析,设置合适的策略。
SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (chain, authType) -> true) .build(); SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory( sslContext, // 添加你想支持的协议 new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); // 或其它重载方法,如: // new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE) Registry socketFactoryRegistry = RegistryBuilder.create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", sslConnectionSocketFactory) .build(); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); HttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .build();
RestTemplate(org.springframework.web.client)
步骤1:参照前文所述的HttpClient,创建一个HttpClient实例
步骤2:创建RestTemplate实例
// httpClient 是步骤1中创建的 HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory);
相关推荐
通过以上方法,用户可以在Kettle中成功信任所有RESTful API服务端的SSL证书,从而顺利地调用这些API。然而,值得注意的是,这些方法可能会降低系统的安全性,因此在实际部署前需要仔细评估其潜在风险。
有两个解决思路:1、确认是单向认证还是双向认证,Server端是否校验Client端;2、可以忽略服务器证书校验(将hostname校验和CA证书校验同时关闭)。网上最常用的,就是利用jdk生成keyStore文件,该方法忽略服务器...
Java以其跨平台的特性而闻名,它的Socket编程接口使得实现服务端和客户端通信变得相对简单。在Java中,服务端通常创建一个ServerSocket监听特定的端口,等待客户端的连接请求。一旦连接建立,服务器就可以通过Socket...
在Java编程中,Socket是网络通信的基础,常用于实现客户端(Client)与服务器端(Server)之间的双向通信。本项目“java-socket大文件上传-含客户端和服务端”旨在演示如何利用Java Socket API来实现大文件的上传...
"Client.zip"和"Server.zip"可能包含的是使用VB编写的客户端和服务端程序源代码。"www.pudn.com.txt"可能是关于文件来源或教程链接的说明,而"Read Me.txt"通常包含有关压缩包内容的简要介绍或使用指南。 文件传输...
- 使用配置文件如 `clientcert.cfg` 来定义证书属性。 **4.1.4 证书格式** - 确保使用的证书格式兼容TLS协议。 **4.1.5 证书校验** - 在部署前,必须确保所有证书均经过正确的校验。 **4.1.6 证书签名配置** -...
在本源码中,服务端(Server)和客户端(Client)分别扮演着不同的角色。服务端通常监听特定的端口,等待客户端的连接请求。一旦客户端连接成功,服务端就可以接收客户端发送的文件数据,并将这些数据保存到本地。...
运行这个服务端需要Java环境支持,并配置好相应的数据库连接和推送设置。 2. androidpn-server-0.5.0-src.zip:这个文件包含了服务器的源代码。开发者可以深入研究代码,理解其工作原理,或者根据需求进行定制和...
在Java编程语言中,文件传输是一项基础且重要的功能,它涉及到客户端与服务器之间的数据交换。本项目通过"java实现文件传输(上传下载)",旨在教你如何构建一个简单的文件上传和下载系统。以下是对这个项目及其相关...
STM32-H7 ETH-TCP Client项目是一个基于STM32微控制器的TCP/IP客户端实现,主要涉及了嵌入式系统中的网络通信技术。STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,具有高...
STM32-H7 ETH-TCP Client项目是一个基于STM32微控制器的TCP/IP客户端实现,主要涉及了嵌入式系统中的网络通信技术。STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,具有高...
STM32-H7 ETH-TCP Client项目是一个基于STM32微控制器的TCP/IP客户端实现,主要涉及了嵌入式系统中的网络通信技术。STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,具有高...
在JAVA中实现IEC 104规约,开发者通常会使用socket编程来搭建客户端和服务端的通信桥梁。JAVA的Socket类提供了TCP/IP连接的基础,通过建立连接,双方可以进行双向通信。在实现过程中,关键在于理解并正确解析ASDU和...
- **`s_client`** 和 **`s_server`**: 分别作为客户端和服务端的测试工具,用于调试SSL连接。 #### 四、OpenSSL的应用场景 - **Web服务器**: 配置HTTPS服务,保护网站数据的安全传输。 - **电子邮件系统**: 使用S...
这可能涉及到分块传输、校验和计算以及重传机制,以确保即使在网络不稳定的情况下也能成功传输。 传输消息加密功能是为了保证数据的安全性。可能使用了如SSL/TLS等协议进行加密,确保即便数据在网络中传输,也无法...
在本场景中,"Socket Client"的描述表明它被用来实现软件的自动更新,并且能够在后台静默运行,这通常涉及到服务端与客户端之间的交互。 在实现软件自动更新的过程中,Socket客户端扮演着重要的角色。首先,客户端...
在"安全认证"层面,CXF支持多种安全模型,如SSL/TLS、WS-Security(包括X.509证书、用户名令牌、SAML令牌等)。WS-Security是Web服务的一个重要安全规范,它可以添加诸如签名、加密等安全层到SOAP消息中,以确保数据...
9. SSL(Secure Sockets Layer)协议提供数据完整性、用户和服务端认证、加密等安全服务,抵御重放攻击、中间人攻击等。SSL工作在TCP/IP层和应用层之间,支持三种验证级别:双向验证、仅服务器验证和匿名验证。 10....
服务端接收到消息后,可以广播给所有已连接的客户端,或者根据需要对消息进行存储或处理。 【客户端实现】 客户端使用TcpClient连接到服务端的IP地址和端口号,建立连接后,同样通过NetworkStream发送和接收数据。...