`
zhongbiqing
  • 浏览: 35640 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java SSL安全socket的通讯实例

阅读更多
1.使用keytool创建密钥对..并在服务端和客户端完成分配..具体方法可参看:java-使用keytool来创建管理密钥及证书等-java学习笔记(3)
2.建立客户端和服务端的socket实例:
客户端代码如下:
public class SSLClient {
public static void startSSLClient() throws IOException {
int port = 15408;//要连接的服务器端口
String serverAdd = "127.0.0.1";//要连接的服务器地址
try {
System.setProperty("javax.net.ssl.trustStore","clientkey.jks");//设置可信任的密钥仓库
System.setProperty("javax.net.ssl.trustStorePassword","sslkey1"); //设置可信任的密钥仓库的密码
SSLSocketFactory sslsf = (SSLSocketFactory)SSLSocketFactory.getDefault();//利用工厂来创建SSLSocket安全套接字
Socket csocket = sslsf.createSocket(serverAdd,port);//创建并连接服务器
System.out.println("Client OK~");
System.out.println("===============");
System.out.println("");
//以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader( new InputStreamReader(csocket.getInputStream()));//接受到的信息
PrintStream socketOut = new PrintStream(csocket.getOutputStream());//要发送的信息
BufferedReader userIn = new BufferedReader( new InputStreamReader(System.in));//用户输入信息
String s;
while ( true ) {
System.out.print("Client Message: ");
s = userIn.readLine();
socketOut.println(s);
if ( s.trim().equals("BYE") ) break;
else {
System.out.println("Please wait Server Message..");
System.out.println("");
}
s = socketIn.readLine();
System.out.println("Server Message: " + s);
if ( s.trim().equals("BYE") ) break;
}
socketIn.close();
socketOut.close();
userIn.close();
csocket.close();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
public static void main(String[] args) {
try {
startSSLClient();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
服务端代码如下:(这里像换种方式写..结果写烦了..呵呵)
public class SSLServer {
public static void startSSLServer() throws IOException {
int port = 15408;//监听端口
String keyFile = "serverkey.jks";//密钥库文件
String keyFilePass = "sslkey1";//密钥库的密码
String keyPass = "sslkey1";//密钥别名的密码
SSLServerSocket sslsocket = null;//安全连接套接字
KeyStore ks;//密钥库
KeyManagerFactory kmf;//密钥管理工厂
SSLContext sslc = null;//安全连接方式
//初始化安全连接的密钥
try {
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());
kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks,keyPass.toCharArray());
sslc = SSLContext.getInstance("SSLv3");
sslc.init(kmf.getKeyManagers(), null, null);
} catch (KeyManagementException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnrecoverableKeyException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (KeyStoreException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (CertificateException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
}
//用安全连接的工厂来创建安全连接套接字
SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();
sslsocket = (SSLServerSocket) sslssf.createServerSocket(port);//创建并进入监听
System.out.println("Listening...");
SSLSocket ssocket = (SSLSocket)sslsocket.accept();//接受客户端的连接
System.out.println("Server Connection OK~");
System.out.println("========================");
System.out.println("");
//以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader(new InputStreamReader(ssocket.getInputStream()));
BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in));
PrintStream socketOut = new PrintStream(ssocket.getOutputStream());
String s;
while (true) {
System.out.println("Please wait client 's message..");
System.out.println("");
s = socketIn.readLine();
System.out.println("Client Message: " + s);
if ( s.trim().equals("BYE") ) break;
System.out.print("Server Message: ");
s = userIn.readLine();
socketOut.println(s);
if ( s.trim().equals("BYE") ) break;
}
socketIn.close();
socketOut.close();
userIn.close();
sslsocket.close();
}
public static void main(String [] args) {
try {
startSSLServer();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
以上..基本实现了SSL连接..用wireshark抓包比较..证明此方法确实经过加密..比较安全..
分享到:
评论

相关推荐

    Java中SSLSocket应用教程和代码

    创建SSLSocket实例需要SSLSocketFactory,可以通过SSLContext的getSocketFactory方法获取。然后调用factory的createSocket方法,指定服务器的IP地址和端口号。 5. **配置SSLContext** SSLContext是SSLSocket的...

    Java ssl socket 双向认证

    Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...

    Java SSLSocket的使用

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

    java https ssl 实例 例子

    Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...

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

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

    Java中的SSL及HTTPS协议实例源码

    Java中的SSL(Secure Socket Layer)和HTTPS(Hypertext Transfer Protocol Secure)协议是网络通信安全的重要组成部分,尤其在处理敏感信息如用户登录凭证、支付数据等时,它们提供了必要的加密和身份验证机制。...

    SSLServerSocket.rar_java socket _java socket ssl_java ssl server

    `SSLSocket.getInputStream()`和`SSLSocket.getOutputStream()`分别提供加密的输入和输出流。 在实现安全登录时,服务器通常会要求客户端提供身份验证,这可能包括用户名和密码,或者客户端证书。服务器会检查这些...

    SSL+socket 详解-概念

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

    C#和java 之间基于Socket的通信

    - Java中的`SSLSocket`和`SSLServerSocket`,C#中的`SslStream`可以实现安全连接。 9. **性能优化**: - 使用非阻塞I/O或异步I/O可以提高Socket通信的性能。Java的NIO(Non-blocking I/O)和C#的异步编程模型(如...

    java_sx.rar_java socket _java 通讯_socket

    8. **安全性**:在实际应用中,可能会涉及到SSL/TLS安全套接字,用于加密数据传输,保护信息安全。 9. **心跳机制**:在长连接中,为了检测连接是否依然活跃,常需要实现心跳机制,定期发送确认信息。 10. **网络...

    java socket开发即时通讯服务器

    Java Socket 开发即时通讯服务器是构建实时通信系统的关键技术之一,尤其在企业级应用、在线游戏、聊天室等场景中广泛应用。本篇将深入探讨Java Socket在即时通讯服务器开发中的核心概念、步骤以及关键技术。 首先...

    java socket使用加密协议传输对象

    1. **创建SSLSocket实例** 首先,我们需要使用`SSLServerSocketFactory`和`SSLContext`来创建一个`SSLSocket`实例。这通常涉及到加载信任的证书、配置SSL上下文以及设置服务器和客户端的SSL参数。例如: ```java...

    android socket 编程实例

    对于安全性,如果你的应用涉及到敏感信息的传输,应考虑使用SSL/TLS加密的Socket(即SSLSocket),以保证数据的安全性。 最后,Android系统有一些特殊的限制,比如需要在Manifest.xml中声明INTERNET权限,以及在...

    JAVA与VB实现Socket通信实例

    - 创建Socket实例,指定服务器的IP地址和端口号。 - 获取Socket的`OutputStream`对象来发送数据,`InputStream`对象来接收数据。 - 发送和接收数据通常使用`BufferedStream`类提高效率,使用`StreamReader`和`...

    SSL介绍与Java实例

    在Java中,握手通常在创建套接字后自动进行,但也可以通过调用`SSLSocket.startHandshake()`方法手动触发。 6. **证书链和密钥对**: 为了实现SSL,服务器通常需要一个包含公钥的数字证书,该证书由权威的CA签名。...

    卫通星GPS定位器GT06协议socket通讯JAVA Spring Boot对接.zip

    7. **安全考虑**:考虑使用SSL/TLS加密通讯,防止数据在传输过程中被窃取。 8. **集成测试**:编写测试用例,模拟GPS定位器发送数据,验证服务器的解析和响应功能是否正常。 在项目gt06-gps-java-master中,你应该...

    Socket ssl 加密

    在Android中,通常使用java.net.SSLSocket和SSLSocketFactory类来实现SSL/TLS的Socket通信。 3. **生成BKS文件**: BKS(Bouncy Castle Keystore)是Android上常用的SSL证书存储格式。为了实现SSL加密,需要一个...

    Java TCP IP Socket编程(原书第2版)

    一旦接收到客户端的连接请求,服务器就会创建一个新的Socket实例与该客户端通信。 #### 2.3 数据传输 在Java中,通过Socket进行数据传输主要依靠输入流和输出流。客户端和服务器端都可以使用`InputStream`和`...

Global site tag (gtag.js) - Google Analytics