一切尽在代码中,额。自己測试的小样例。感觉非常实用,做个记录。
server端:
package com.mpc.test.clazz;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.TrustManagerFactory;
public class SSLTest {
public static void main(String[] args) throws Exception {
String key = "d:/keys/m.jks";// 定义server端要使用的证书
String trust = "d:keys/trustclient.jks";// 定义server端要信任的证书
/* 个人感觉。上面这两个属性在使用的时候全然能够定义为properties文件或者xml文件来使用 */
KeyStore keyStore = KeyStore.getInstance("JKS");// 定义一个KeyStore用来存储server的秘钥文件
keyStore.load(new FileInputStream(key), "123456".toCharArray());// 载入server端使用的证书,当然要输入要打开加密文件的password了
KeyStore trustStore = KeyStore.getInstance("JKS");// 定义一个KeyStore用来存储server信任的证书文件
trustStore.load(new FileInputStream(trust), "123456".toCharArray());// 载入server端信任的证书文件,当然也要输入password的
/** 额,事实上keyStore和truststore都是Keystore的大家都看到了,就是保存的秘钥文件不同而已了 */
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
.getDefaultAlgorithm());/*
* 创建一个server的秘钥管理工厂,KeyManagerFactory.
* getDefaultAlgorithm
* ()是指定的默认的算法,记得是RSA··输出一下就OK了
*/
kmf.init(keyStore, "mipengcheng".toCharArray());/*
* 初始化。在初始化的时候须要自定秘钥的password,
* 这个在创建的时候指定的
*/
TrustManagerFactory tmf = TrustManagerF