学习了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抓包比较..证明此方法确实经过加密..比较安全..
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抓包比较..证明此方法确实经过加密..比较安全..
发表评论
-
NIO入门
2012-07-25 17:40 696见附件!!!! -
Axis-Webservice课程
2012-07-10 11:40 1908http://hi.baidu.com/annleecn/ ... -
使用keytool来创建管理密钥及证书
2012-06-07 17:51 1781使用SSL来实现安全加密通讯需要有密码对及公钥证书等.. ... -
SSL+socket
2012-06-07 17:20 951Java代码 服务器端代码: ... -
用SSL构建安全的Socket
2012-06-07 16:38 1369SSL(安全套接层)是 Netscape公司在1994年开发的 ... -
keytool 用法总结
2012-06-07 16:37 15110内容概览: keytool的几个常用的命令。 1.创建证书 ... -
XStream实现Object与XML转换解决方案
2012-06-05 11:16 1099方案说明: 1:特点 > 0 配置 > ... -
AAAA26
2012-04-28 11:19 0建议3 IO操作流使用有Buffer功能的class. (1. ... -
AAAA25
2012-04-28 11:19 03.5.2 建议 建议1 public类型的底层函数需对输入 ... -
AAAA24
2012-04-28 11:18 0规则5 对类中日志工具对象logger应声明为static. ... -
AAAA23
2012-04-28 11:18 0规则4 Java 1.4中大量字符串的“相加”操作应该使用St ... -
AAAA22
2012-04-28 11:18 03.5 性能与可靠性 3.5.1 规则 规则1 对Debu ... -
AAAA21
2012-04-28 11:17 0建议11 使用Java 5.0枚举来替代以前用数字与字符串的同 ... -
AAAA20
2012-04-28 11:16 0建议7 不要使用难懂的技巧性很高的语句,除非很有必要时。(1. ... -
AAAA19
2012-04-28 11:14 03.4.2 建议 建议1 记录异常不要保存exception ... -
AAAA18
2012-04-28 11:04 0规则14 判断语句不要使用”* == true”来判断为真 说 ... -
AAAA17
2012-04-28 11:04 0规则9 不要使用 System.out 与 System.er ... -
AAAA16
2012-04-28 11:03 0应改为如下形式: private final static i ... -
AAAA15
2012-04-28 11:03 0应改为如下形式: private final static i ... -
AAAA14
2012-04-28 11:02 0规则5 在程序中使用异常处理还是使用错误返回码处理,根据是否有 ...
相关推荐
5. 通过SSLContext获取SSLServerSocketFactory或SSLSocketFactory来创建SSLServerSocket或SSLSocket,进行安全的通信。 由于SSL/TLS协议的复杂性,开发人员在使用JSSE进行SSL/TLS编程时需要深入理解相关的加密原理...
创建SSLSocket实例需要SSLSocketFactory,可以通过SSLContext的getSocketFactory方法获取。然后调用factory的createSocket方法,指定服务器的IP地址和端口号。 5. **配置SSLContext** SSLContext是SSLSocket的...
对于安全性,如果你的应用涉及到敏感信息的传输,应考虑使用SSL/TLS加密的Socket(即SSLSocket),以保证数据的安全性。 最后,Android系统有一些特殊的限制,比如需要在Manifest.xml中声明INTERNET权限,以及在...
在Java编程中,`SSLSocket`是用于创建安全套接层(SSL)或传输层安全(TLS)连接的重要类,它提供了加密的数据传输服务,确保了网络通信的安全性。`SSLSocket`是Java标准库`javax.net.ssl`包的一部分,主要应用于...
在Android中,通常使用java.net.SSLSocket和SSLSocketFactory类来实现SSL/TLS的Socket通信。 3. **生成BKS文件**: BKS(Bouncy Castle Keystore)是Android上常用的SSL证书存储格式。为了实现SSL加密,需要一个...
在Android中使用SSLSocket,我们需要先创建一个SSLSocketFactory,这个工厂类用于创建SSLSocket实例。 1. **证书制作**:在实际应用中,我们需要为服务器生成一对公钥和私钥,以及对应的数字证书。这通常通过...
1. 首先,创建一个Socket实例,指定IP协议类型(如IPv4或IPv6)和端口号。 2. 使用Bind方法将Socket绑定到本地IP地址和端口上。 3. 开始监听客户端连接,调用Listen方法,设置最大等待连接队列长度。 4. 当有客户端...
本篇将深入探讨"C# Socket服务实例"的相关知识点。 1. **Socket基本概念** Socket,通常被称为套接字,是网络通信中的一个抽象接口,它允许应用程序通过发送和接收数据进行通信。在C#中,Socket类位于System.Net....
在实际应用中,可能需要考虑Socket通信的安全性,如使用SSL/TLS进行加密传输,这可以通过`SslStream`类实现。 8. **服务端与客户端设计** 服务器端通常会持续监听新的连接,并为每个连接创建一个新的线程或任务来...
Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...
在这里,`sslContext`是`javax.net.ssl.SSLContext`的一个实例,它包含了关于SSL/TLS配置的所有信息,如证书、密钥和协议版本等。你需要先通过`SSLContext.getInstance()`方法选择合适的协议(如TLSv1.2),然后使用...
在Android中,实现Socket通信首先要创建一个Socket实例,然后通过`Socket.connect()`方法连接到服务器。数据的发送和接收通常通过`Socket.getOutputStream()`和`Socket.getInputStream()`获取的流对象来完成。 3. ...
作者可能通过实例代码演示了如何正确配置和使用SSLSocket来避免或解决这类问题。 首先,了解SSL/TLS(Transport Layer Security)协议的基础知识是必要的。SSL/TLS用于在两个通信实体之间建立安全的连接,防止中间...
Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...
**安全考虑**:在生产环境中,使用SSL/TLS加密的`SSLSocket`和`SSLServerSocket`以保护数据的安全性。 **性能优化**:适当设置缓冲区大小,减少网络I/O的次数,可以提高通信效率。 总结,Android实现Socket通讯...
7. **安全性**: 考虑到数据的安全性,可以集成SSL/TLS协议对传输数据进行加密,防止数据在传输过程中被窃取或篡改。 综上所述,SuperSocket完整实例为我们提供了一个实现大文件传输的平台。通过理解和掌握Super...
3. **创建SSLSocket**:使用SSLContext的getSocketFactory()方法创建SSLSocket,这是实际建立安全连接的对象。 4. **握手过程**:SSLSocket会自动进行SSL/TLS的握手,双方交换身份信息、协商加密算法,并验证彼此的...
在实际应用中,除了基本的通信功能,还需要考虑安全问题,如使用SSL/TLS加密通信以防止中间人攻击,以及验证客户端身份以防止非法接入。 总的来说,Socket编程实例中的聊天应用展示了如何利用Socket接口实现多用户...
7. **安全考虑**:考虑使用SSL/TLS加密通讯,防止数据在传输过程中被窃取。 8. **集成测试**:编写测试用例,模拟GPS定位器发送数据,验证服务器的解析和响应功能是否正常。 在项目gt06-gps-java-master中,你应该...