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

SSL安全socket的通讯实例

    博客分类:
  • java
 
阅读更多
学习了SSL的基本原理后..动手用java来实现了一个安全连接的实例..
1.使用keytool创建密钥对..并在服务端和客户端完成分配..具体方法可参看:java-使用keytool来创建管理密钥及证书
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抓包比较..证明此方法确实经过加密..比较安全..

 

分享到:
评论

相关推荐

    SSL+socket 详解-概念

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

    Java中SSLSocket应用教程和代码

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

    android socket 编程实例

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

    Java SSLSocket的使用

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

    Socket ssl 加密

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

    SSLSocket通信Demo android版

    在Android中使用SSLSocket,我们需要先创建一个SSLSocketFactory,这个工厂类用于创建SSLSocket实例。 1. **证书制作**:在实际应用中,我们需要为服务器生成一对公钥和私钥,以及对应的数字证书。这通常通过...

    c# SOCKET 聊天通讯 实例

    1. 首先,创建一个Socket实例,指定IP协议类型(如IPv4或IPv6)和端口号。 2. 使用Bind方法将Socket绑定到本地IP地址和端口上。 3. 开始监听客户端连接,调用Listen方法,设置最大等待连接队列长度。 4. 当有客户端...

    C# Socket服务实例

    本篇将深入探讨"C# Socket服务实例"的相关知识点。 1. **Socket基本概念** Socket,通常被称为套接字,是网络通信中的一个抽象接口,它允许应用程序通过发送和接收数据进行通信。在C#中,Socket类位于System.Net....

    C#Socket通信稳定完整版类库实例

    在实际应用中,可能需要考虑Socket通信的安全性,如使用SSL/TLS进行加密传输,这可以通过`SslStream`类实现。 8. **服务端与客户端设计** 服务器端通常会持续监听新的连接,并为每个连接创建一个新的线程或任务来...

    Java ssl socket 双向认证

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

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

    在这里,`sslContext`是`javax.net.ssl.SSLContext`的一个实例,它包含了关于SSL/TLS配置的所有信息,如证书、密钥和协议版本等。你需要先通过`SSLContext.getInstance()`方法选择合适的协议(如TLSv1.2),然后使用...

    Android和电脑Socket通信实例.rar

    在Android中,实现Socket通信首先要创建一个Socket实例,然后通过`Socket.connect()`方法连接到服务器。数据的发送和接收通常通过`Socket.getOutputStream()`和`Socket.getInputStream()`获取的流对象来完成。 3. ...

    android 7.0 SSLsocket

    作者可能通过实例代码演示了如何正确配置和使用SSLSocket来避免或解决这类问题。 首先,了解SSL/TLS(Transport Layer Security)协议的基础知识是必要的。SSL/TLS用于在两个通信实体之间建立安全的连接,防止中间...

    java https ssl 实例 例子

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

    android实现socket通讯

    **安全考虑**:在生产环境中,使用SSL/TLS加密的`SSLSocket`和`SSLServerSocket`以保护数据的安全性。 **性能优化**:适当设置缓冲区大小,减少网络I/O的次数,可以提高通信效率。 总结,Android实现Socket通讯...

    SuperSocket完整实例

    7. **安全性**: 考虑到数据的安全性,可以集成SSL/TLS协议对传输数据进行加密,防止数据在传输过程中被窃取或篡改。 综上所述,SuperSocket完整实例为我们提供了一个实现大文件传输的平台。通过理解和掌握Super...

    基于Java的实例开发源码-SSL及HTTPS协议实例源码.zip

    3. **创建SSLSocket**:使用SSLContext的getSocketFactory()方法创建SSLSocket,这是实际建立安全连接的对象。 4. **握手过程**:SSLSocket会自动进行SSL/TLS的握手,双方交换身份信息、协商加密算法,并验证彼此的...

    socket编程实例

    在实际应用中,除了基本的通信功能,还需要考虑安全问题,如使用SSL/TLS加密通信以防止中间人攻击,以及验证客户端身份以防止非法接入。 总的来说,Socket编程实例中的聊天应用展示了如何利用Socket接口实现多用户...

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

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

Global site tag (gtag.js) - Google Analytics