`
sariel
  • 浏览: 53286 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

TLS/SSL Socket 实现

    博客分类:
  • Java
阅读更多
服务器端代码:
import java.net.*;
import javax.net.ssl.*;
import java.io.*;
import java.security.*;

public class SSLServer {

	private static int port = 50003;
	private static SSLServerSocket server;

	public static void initSSLServerSocket() {
		try {
			/** 要使用的证书名 **/
			String cert = "\\key.cert";
			/** 要使用的证书密码 **/
			char certPass[] = "123456".toCharArray();
			/** 证书别称所使用的主要密码 **/
			char certAliaMainPass[] = "123456".toCharArray();
			/** 创建JKS密钥库 **/
			KeyStore keyStore = KeyStore.getInstance("JKS");
			keyStore.load(new FileInputStream(cert), certPass);
			/** 创建管理JKS密钥库的X.509密钥管理器 **/
			KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
			keyManagerFactory.init(keyStore, certAliaMainPass);
			SSLContext sslContext = SSLContext.getInstance("TLSV1");
			/** 想使用SSL时,更改成如下,注释部分 **/
			//SSLContext sslContext = SSLContext.getInstance("SSLV3");
			sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
			SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();
			server = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static void main(String args[]) {
		try {
			initSSLServerSocket();
			System.out.println("服务器在端口 [" + port + "] 等待连接...");
			while (true) {
				SSLSocket socket = (SSLSocket) server.accept();
				new CreateThread(socket);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class CreateThread extends Thread {
	private static BufferedReader in;
	private static PrintWriter out;
	private static Socket s;

	public CreateThread(Socket socket) {
		try {
			s = socket;
			in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));
			out = new PrintWriter(s.getOutputStream(), true);
			start();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void run() {
		try {
			String msg = in.readLine();
			System.out.println("接收到: " + msg);
			out.write("服务器接收到的信息是: " + msg);
			out.flush();
			s.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

客户端代码:
import java.net.*;
import javax.net.ssl.*;
import java.io.*;

public class SSLClient {

	static int port = 50003;

	public static void main(String args[]) {
		try {
			SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
			Socket s = factory.createSocket("192.168.12.41", port);
			BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));
			PrintWriter out = new PrintWriter(s.getOutputStream(), true);
			out.println("证书启用成功!");
			System.out.println(in.readLine());
			out.close();
			s.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

服务器启动:java SSLServer
            key.cert 文件需要和 SSLServer.class 同一目录下

客户端运行:java -Djavax.net.ssl.trustStore=key.cert SSLClient

key文件生成:keytool -genkey -keystore Key.cert -keyalg rsa –alias tempkey
或者: keytool -genkey -alias tempkey -keysize 512 -validity 3650 -keyalg RSA -dname "CN=sariel.iteye.com, OU=sariel CA,  O=sariel Inc, L=Stockholm, S=Stockholm, C=SE" -keypass 123456 -storepass 123456 -keystore key.cert
  • key.rar (934 Bytes)
  • 下载次数: 210
分享到:
评论
1 楼 wangleifire 2011-07-26  
请问为什么我总是报Client:unable to find valid certification path to requested target
Server:Received fatal alert: certificate_unknown
请加QQ346685272 谢谢!

相关推荐

    基于 MINA 的 TLS/SSL NIO Socket 实现(二)

    在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...

    JAVA实现的SSL/TLS双向认证源代码

    4. **客户端实现**:对应的`TeslaSSLClient`类则需要配置SSLSocket,同样使用自定义的`SSLContext`。客户端在建立连接时会提供自己的证书。 5. **测试**:在完成上述步骤后,你可以使用wss(WebSocket Secure)协议...

    Java中SSLSocket应用教程和代码

    在Java编程语言中,SSLSocket(Secure Sockets Layer Socket)是用于实现安全网络通信的重要组件,它基于SSL/TLS协议栈,为应用程序提供加密的数据传输服务。本教程将深入探讨Java中的SSLSocket应用,包括其基本概念...

    Java Socket 实现SMTP邮件发送,支持SSL/TSL

    Java的`javax.net.ssl.SSLSocket`类是用于创建SSL/TLS连接的,它继承自`Socket`,并在连接建立后自动进行加密。 5. **邮件构造**:在Java中,可以使用`javax.mail`和`javax.mail.internet`包来构造和格式化邮件。`...

    mongodb开启SSL传输加密

    在现代网络安全环境中,确保数据在传输过程中的安全性至关重要,SSL(Secure Socket Layer)或其更新版本TLS(Transport Layer Security)正是实现这一目标的关键技术。SSL/TLS可以提供端到端的数据加密,防止中间人...

    C# tcp/ip Socket Programmer

    8. **网络安全**:了解基本的网络安全策略,如SSL/TLS加密,以及如何在C#中实现安全的Socket通信。 9. **案例分析**:书中可能会包含实际的案例,如创建简单的聊天程序、文件传输应用,帮助读者将理论知识应用于...

    利用C#实现SSLSocket加密通讯的方法详解

    「C#实现SSLSocket加密通讯方法详解」 在网络通讯中,安全性是一个非常重要的方面,而SSL/TLS协议则是最常用的加密通讯协议之一。C#作为一个强大的编程语言,可以轻松地实现SSL/TLS协议的加密通讯。下面将详细介绍...

    Netty和SSL/TLS应用例子

    在实现Socket服务端和客户端时,我们需要在`ChannelInitializer`中添加SSL/TLS处理。对于服务器端,我们调用`SslContext.newServerContext()`来创建`ServerSslContext`,然后将其添加到管道的`SslHandler`。对于...

    基于boost asio TCP/SSL 网络库

    在标题中提到的“基于boost asio TCP/SSL网络库”是一个利用Boost.Asio实现的,具备TCP和SSL功能的网络库。这个库为开发者提供了构建高效、可靠的网络应用程序的基础。 **TCP(Transmission Control Protocol)** ...

    基于SSL/TLS协议的FTP客户端和服务器端

    在Java中,实现基于SSL/TLS的FTP客户端需要创建`SSLSocket`连接到服务器,并进行必要的握手过程。服务器端则需创建`SSLServerSocket`来监听连接,并处理客户端的认证请求。整个过程涉及SSL/TLS的初始化、证书管理、...

    Java SSLSocket的使用

    在Java编程中,`SSLSocket`是用于创建安全套接层(SSL)或传输层安全(TLS)连接的重要类,它提供了加密的数据传输服务,确保了网络通信的安全性。`SSLSocket`是Java标准库`javax.net.ssl`包的一部分,主要应用于...

    SSLSocket通信Demo android版

    本教程主要针对初学者,详细讲解如何在Android应用中实现SSLSocket通信,并通过Eclipse IDE进行DEMO演示。 首先,理解SSLSocket的基本原理。SSLSocket是在Socket基础上增加了一层加密机制,它通过握手协议、密钥...

    ssl/tls安全协议

    SSL/TLS(Secure Socket Layer/Transport Layer Security)安全协议是互联网上用于保护数据传输的协议标准,它为网络通信提供加密处理,确保数据在传输过程中不被窃取或篡改。该协议广泛应用于Web浏览器和其他需要...

    SSL-Socket-Client_socket实现https_socketssl_SSLSOCKET_https_

    在提供的压缩包文件“SSL-Socket-Client”中,可能包含了一个示例程序,展示了如何使用上述步骤实现SSL连接。这个程序可能包含了SSL上下文的创建、证书验证的设置、SSL连接的建立以及数据传输的代码。通过学习和理解...

    灵活方便的TCP/IP Socket服务端及客户端工具

    实际应用中,通常需要结合SSL/TLS等安全协议来加密通信,防止数据被窃取或篡改。 9. **性能优化**:对于高性能服务器,可能会涉及到连接池、缓冲区管理、非阻塞I/O等技术来提升处理效率。 综上所述,这个工具提供...

    android 7.0 SSLsocket

    SSLSocket sslSocket = (SSLSocket) socketFactory.createSocket(); sslSocket.setHostnameVerifier(hostnameVerifier); ``` 通过这样的配置,开发者可以确保在Android 7.0上,即使面对非标准的证书配置,也能正常...

    SSL+socket 详解-概念

    5. 通过SSLContext获取SSLServerSocketFactory或SSLSocketFactory来创建SSLServerSocket或SSLSocket,进行安全的通信。 由于SSL/TLS协议的复杂性,开发人员在使用JSSE进行SSL/TLS编程时需要深入理解相关的加密原理...

    java socket实现smtp发送邮件,支持SSL

    Java Socket 实现 SMTP 发送邮件是一项常见的编程任务,尤其在自动化通知、系统间通信或用户交互中非常有用。SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的标准协议,而Java Socket则是Java...

Global site tag (gtag.js) - Google Analytics