读书人

Java SSL Socket 聊天范例

发布时间: 2013-04-02 12:35:26 作者: rapoo

Java SSL Socket 聊天实例
package com.xiawenquan.ssl;/** * Java sslSocket 聊天实例 *SSL Socket的服务器端 *@Author xiawenquan */import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLServerSocket;import javax.net.ssl.SSLServerSocketFactory;import javax.net.ssl.SSLSocket;public class SSLServer {public static void startSSLServer() throws IOException {final int port = 16666;// 监听端口String keyFile = "E:\\serverkey.jks";// 密钥库文件String keyFilePass = "xiawenuqan";// 密钥库的密码String keyPass = "changeit";// 密钥别名的密码SSLServerSocket sslsocket = null;// 安全连接套接字KeyStore ks;// 密钥库KeyManagerFactory kmf;// 密钥管理工厂SSLContext sslc = null;// 安全连接方式// 初始化安全连接的密钥try {ks = KeyStore.getInstance("JKS");ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());// 创建管理JKS密钥库的X.509密钥管理器kmf = KeyManagerFactory.getInstance("SunX509");kmf.init(ks, keyPass.toCharArray());//构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用sslc = SSLContext.getInstance("SSLv3");//初始化SSL环境。第二个参数是告诉JSSE使用的可信任证书的来源,//设置为null是从javax.net.ssl.trustStore中获得证书。第三个参数是JSSE生成的随机数,//这个参数将影响系统的安全性,设置为null是个好选择,可以保证JSSE的安全性。sslc.init(kmf.getKeyManagers(), null, null);} catch (KeyManagementException ex) {} catch (KeyStoreException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (CertificateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnrecoverableKeyException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 用安全连接的工厂来创建安全连接套接字SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();sslsocket = (SSLServerSocket) sslssf.createServerSocket();// 创建并进入监听SocketAddress sa=new InetSocketAddress("localhost",port);sslsocket.bind(sa);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().trim();if(s != null && !s.equals("")){System.out.println("Client Message: " + s);if (s.trim().equals("BYE")){break;}System.out.print("Server Message: ");}s = userIn.readLine().trim();if(s != null && !s.equals("")){socketOut.println(s);if (s.trim().equalsIgnoreCase("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);}}}

?

package com.xiawenquan.ssl;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;import javax.net.ssl.SSLSocketFactory;/** * Java sslSocket 聊天实例 * SSL Socket的客户端 * @author xiawenquan * */public class SSLClient {static int port = 28080;public static void startSSLClient() throws IOException {int port = 16666;// 要连接的服务器端口String serverAdd = "localhost";// 要连接的服务器地址192.168.1.39try {System.setProperty("javax.net.ssl.trustStore", "E:\\serverkey.jks");// 设置可信任的密钥仓库System.setProperty("javax.net.ssl.trustStorePassword", "xiawenuqan"); // 设置可信任的密钥仓库的密码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().trim();if(s != null && !s.equals("")){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().equalsIgnoreCase("BYE")){break;}}}socketIn.close();socketOut.close();userIn.close();csocket.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {try {startSSLClient();} catch (Exception e) {System.out.println("Error: " + e);}}}

?

?

?

读书人网 >移动开发

热点推荐