ssl双向认证

服务器段代码:


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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值