ssl socket java_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抓包比较..证明此方法确实经过加密..比较安全..

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-10-24 14:14

浏览 6330

评论

1 楼

ds_dusha

2016-06-07

楼主,有个问题需要和你探讨一下,wireshark 抓包,数据是加密了,为啥协议显示的tcp而不是ssl或者tls协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值