`

SSL多线程安全问题

 
阅读更多

项目原因,代码实现证书控制,网上很多介绍使用System.setProt。。。等方法,后突然想到应该会有多线程安全问题,应为我方系统可能多个证书,故在iteye咨询大牛帮忙,详细见:

 http://www.iteye.com/problems/94392

后按照一个那个朋友介绍,使用代码读取文件方式加载ssl,详细见:

SSLContext ctx = httpsMap.get(prjcodVal.getCPDPRJCOD().toUpperCase());
		if(ctx == null){
			//SSL设置,使用文件方式,如果使用system赋值方式会有多线程问题
			ctx = SSLContext.getInstance("SSL");
			KeyManagerFactory kmf = KeyManagerFactory
					.getInstance("SunX509");
			TrustManagerFactory tmf = TrustManagerFactory
					.getInstance("SunX509");
			KeyStore ks = KeyStore.getInstance("JKS");
			KeyStore tks = KeyStore.getInstance("JKS");
			ks.load(new FileInputStream(Constants
					.getConstants().getStrCertFilePath()
					+ prjcodVal.getCPDPRJCOD().toUpperCase() + ".jks"),
					Constants.getConstants().getStrHTTPSCERPWD().toCharArray());
			tks.load(new FileInputStream(Constants
					.getConstants().getStrCertFilePath()
					+ prjcodVal.getCPDPRJCOD().toUpperCase() + ".jks"),
					Constants.getConstants().getStrHTTPSCERPWD().toCharArray());
			kmf.init(ks, Constants.getConstants().getStrHTTPSCERPWD().toCharArray());
			tmf.init(tks);
			ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(),
					null);
			httpsMap.put(prjcodVal.getCPDPRJCOD().toUpperCase(), ctx);
		} 
		((HttpsURLConnection)httpUrlConnection).setSSLSocketFactory(ctx.getSocketFactory());
		((HttpsURLConnection) httpUrlConnection)
			.setHostnameVerifier(new HostnameVerifier() {
				//让JRE相信所有的证书和对系统的域名和证书域名
				public boolean verify(String urlHostName,
						SSLSession session) {
					return true;
				}
			});

 读取之前从静态属性map中读取一下,如果不存在,则获取,然后放入map中,这样也可以提高效率。

分享到:
评论

相关推荐

    使用pthread库实现openssl多线程ssl服务端和客户端

    在实现多线程SSL服务端时,我们需要特别注意线程安全问题,确保在处理并发请求时正确地锁定资源,避免竞态条件。此外,客户端也需要类似地使用OpenSSL库来建立SSL连接,验证服务端证书,并进行安全通信。 总的来说...

    delphi多线程socket服务器客户端

    - 服务器端需处理线程异常,确保线程安全退出,避免资源泄露。 通过上述步骤,你可以构建一个基础的Delphi多线程Socket服务器客户端系统,实现高效、稳定的网络通信。随着需求的增加,可以扩展功能,如添加多线程...

    flask开启多线程的具体方法

    - **资源共享**:多线程环境下需要注意数据共享问题,确保不会出现竞态条件。 - **GIL 限制**:Python 的全局解释器锁 (GIL) 可能会限制 CPU 密集型任务的并行性。在这种情况下,可以考虑使用多进程或其他并发模型。...

    TCP多线程服务器demo

    1. **线程安全**:由于多个线程可能同时访问共享资源,如连接队列或客户端数据,所以需要考虑线程安全问题。使用锁或其他同步机制来防止数据竞争是必要的。 2. **线程池**:为避免过度创建和销毁线程带来的开销,...

    多线程TELNET服务

    5. **线程同步**:在多线程环境下,线程安全是必须考虑的问题。为了避免数据竞争和死锁,可能需要使用互斥量(`std::mutex`)、条件变量(`std::condition_variable`)或其他同步机制。 6. **客户端管理**:每个...

    linux下用C写的基于SSL 的TCP例子代码!

    具体的实现细节可能因实际需求而略有不同,例如添加错误处理代码、实现多线程支持等。在实际项目中,你可能还需要处理如证书链、客户端认证、异步I/O等更复杂的情况。通过阅读OpenSSL的文档和示例代码,你可以深入...

    mfc多线程聊天程序

    在实际的"多线程聊天程序"项目中,你可能还会涉及到SSL/TLS加密、身份验证、消息的序列化和反序列化、数据库交互等多个方面的知识。这些都需要根据具体需求和技术栈进行深入研究和实现。通过这样的项目实践,你不仅...

    VC_FTP多线程上传、下载

    6. **安全性**:确保使用安全的FTP协议,如FTPS(FTP over TLS/SSL)或SFTP(SSH File Transfer Protocol),以保护数据在传输过程中的安全。 在开发VC_FTP多线程上传、下载应用时,需要对FTP协议、多线程编程以及...

    FTP多线程上传文件资料

    6. **错误处理与重试机制**:在多线程环境中,网络问题和服务器错误是常见的。因此,需要设计合适的错误处理机制,如超时重试,断点续传,以及错误恢复策略。 7. **FTP库的使用**:许多编程语言都有FTP库支持,如...

    java多线程多人聊天系统

    综上所述,Java多线程多人聊天系统涉及的技术点包括线程的创建与管理、并发控制、线程通信、异常处理、线程池、网络编程、序列化、安全性以及性能优化。通过熟练掌握这些技术,可以构建出稳定、高效且可扩展的聊天...

    基于swing的多线程聊天室

    【基于Swing的多线程聊天室】是一个Java应用程序,它利用了Swing库来构建图形用户界面(GUI)并采用多线程技术实现多用户之间的实时通信。Swing是Java Standard Edition(Java SE)的一部分,提供了丰富的组件库用于...

    多线程客户端

    6. **安全性**:多线程FTP客户端可能支持SSL/TLS加密,以保护传输的数据安全,防止中间人攻击和数据泄露。 7. **优化策略**:为了提高传输速度,客户端可能会采用各种优化策略,例如预读取、缓冲管理和断点续传功能...

    qt多线程服务器文件传输

    本项目"qt多线程服务器文件传输"利用Qt的特性,构建了一个服务端程序,该程序能同时处理多个客户端的连接,并且能够并发地进行多个文件的传输任务。以下是对这一主题的详细解释: 1. **Qt中的多线程**: 在Qt中,...

    C#多线程socket聊天室A

    同时,使用Mutex、Semaphore等同步机制可以防止资源竞争,确保线程安全。 在聊天室服务器的实现中,可能会包含以下核心组件: 1. **服务器监听线程**:该线程负责监听特定端口上的连接请求,一旦有新的客户端连接...

    gsoap实现多线程实时通信

    3. **并发控制**:使用适当的锁机制(如互斥锁、读写锁)来确保线程安全,防止数据竞争。 4. **异步I/O**:利用异步I/O模型(如Windows的IOCP或Linux的epoll)提高I/O操作的效率。 5. **错误处理**:良好的错误处理...

    多线程网站扫描工具

    总之,多线程网站扫描工具是网络安全领域不可或缺的工具,它通过高效的多线程技术,帮助用户快速识别和解决网站的安全问题,保障网站的稳定运行和数据安全。而【060915webscan】这样的文件则记录了扫描过程中的关键...

    VC socket多线程文件传输

    在Windows环境下,Visual C++(简称VC)是一个常用的开发工具,它支持C++语言,可以用来实现多线程Socket文件传输。这个主题主要涵盖以下几个方面: 1. **Socket基础知识**:Socket是操作系统提供的接口,它允许...

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    在Java编程中,多线程和线程安全是核心概念,尤其在开发高效、并发的网络应用程序时。HTTP协议作为互联网上广泛使用的应用层协议,为数据交换提供了基础。本项目"Java多线程与线程安全实践-基于Http协议的断点续传...

    java多线程加队列上传文件_后台处理

    ### Java多线程加队列上传文件_后台处理 #### 概述 本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时...

    ssl客户端和服务端代码vc6

    SSL(Secure Sockets Layer)是一种安全协议,用于在互联网上提供加密通信以及服务器身份验证。在VC6,即Microsoft Visual C++ 6.0环境下,我们可以利用SSL库来编写客户端和服务端的应用程序,以实现安全的数据传输...

Global site tag (gtag.js) - Google Analytics