服务器段代码:
package com.xingkong.test.sslbothway;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
public class ServerSSL {
public static void main(String[] args) throws Exception {
String password = "11961677";
String fileDirectory = "F:\\server\\kserver.jks";
String tpassword = "c123456";
String tfileDirectory = "F:\\client\\struststore.keystore";
FileInputStream fis = new FileInputStream(new File(fileDirectory));
FileInputStream tfis = new FileInputStream(new File(tfileDirectory));
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(fis, password.toCharArray());
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SUNX509");
keyManagerFactory.init(keyStore, password.toCharArray());
KeyManager[] KeyManager = keyManagerFactory.getKeyManagers();
KeyStore tkeyStore = KeyStore.getInstance("jks");
tkeyStore.load(tfis, tpassword.toCharArray());
TrustManagerFactory trustManageFactory = TrustManagerFactory.getInstance("SUNX509");
trustManageFactory.init(tkeyStore);
TrustManager[] trustManager = trustManageFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSLv3");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
sslContext.init(KeyManager, trustManager, random);
ServerSocket serverSocket = sslContext.getServerSocketFactory().createServerSocket();
serverSocket.bind(new InetSocketAddress(10000));
Socket socket = serverSocket.accept();
socket.setKeepAlive(true);
InputStream is = socket.getInputStream();
String data = new BufferedReader(new InputStreamReader(is)).readLine();
System.out.println("server received data ["+data+"]");
System.out.println("connected is open "+socket.isConnected());
is.close();
}
}
客户端代码:
package com.xingkong.test.sslbothway;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
public class ClientSSL {
public static void main(String[] args) throws Exception {
String password = "c11961677";
String fileDirectory = "F:\\client\\kclient.jks";
String tpassword = "123456";
String tfileDirectory = "F:\\server\\ctruststore.keystore";
FileInputStream fis = new FileInputStream(new File(fileDirectory));
FileInputStream tfis = new FileInputStream(new File(tfileDirectory));
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(fis, password.toCharArray());
KeyStore tkeyStore = KeyStore.getInstance("jks");
tkeyStore.load(tfis, tpassword.toCharArray());
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SUNX509");
keyManagerFactory.init(keyStore, password.toCharArray());
KeyManager[] KeyManager = keyManagerFactory.getKeyManagers();
TrustManagerFactory trustManageFactory = TrustManagerFactory.getInstance("SUNX509");
trustManageFactory.init(tkeyStore);
TrustManager[] trustManagers = trustManageFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSLv3");
SecureRandom secureRandom = new SecureRandom();
sslContext.init(KeyManager, trustManagers, secureRandom);
Socket Socket = sslContext.getSocketFactory().createSocket("127.0.0.1", 10000);
OutputStream out = Socket.getOutputStream();
String data = "1111111111111111";
out.write(data.getBytes());
out.close();
}
}
文中所使用密钥下载地址:
http://download.csdn.net/detail/xk_11961677/5283674