package com;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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 java.security.cert.X509Certificate;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManagerFactory;
public class SSLClient {
private static final String SERVER_HOST = "127.0.0.1";
private static final int SERVER_PORT = 8443;
private static final String CLIENT_KEYSTORE_PWD = "12345678";
private static final String CLIENT_TRUST_KEYSTORE_PWD = "12345678";
SSLSocket clientSocket;
public SSLClient() {
try {
// Initialize SSLClient
// keyStore的load一定要用PKCS12,非JKS;trustKeyStore的load可以是PKCS12或者是JKS
KeyStore keyStore = KeyStore.getInstance("PKCS12");
KeyStore trustKeyStore = KeyStore.getInstance("PKCS12");
/**
ok:client.p12\server.p12 client.p12\ca.p12 服务端接收为:cl/ca
如果为:ca.p12/server.p12 ca.p12/ca.p12服务端接收为:ca/ca
如果为:server.p12/ca.p12 server.p12/server.p12 服务端接收为:svr/ca
*/
keyStore.load(new FileInputStream("./src/client.p12"),
CLIENT_KEYSTORE_PWD.toCharArray());
trustKeyStore.load(new FileInputStream("./src/server.p12"),
CLIENT_TRUST_KEYSTORE_PWD.toCharArray());
// Initialize KeyStore Factory
KeyManagerFactory keyManagerFactory = KeyManagerFactory
.getInstance("SunX509");
TrustManagerFactory trustManagerFactory = TrustManagerFactory
.getInstance("SunX509");
keyManagerFactory.init(keyStore, CLIENT_KEYSTORE_PWD.toCharArray());
trustManagerFactory.init(trustKeyStore);
// Initialize SSLContext
SSLContext context = SSLContext.getInstance("SSL");
context.init(keyManagerFactory.getKeyManagers(),
trustManagerFactory.getTrustManagers(), null);
// Set up Client Socket
clientSocket = (SSLSocket) context.getSocketFactory().createSocket(
SERVER_HOST, SERVER_PORT);
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void Test() {
try {
if (clientSocket == null) {
System.out.println("NULL clientSocket");
return;
}
// Run Client Test
InputStream input = null;
OutputStream output = null;
input = clientSocket.getInputStream();
output = clientSocket.getOutputStream();
// Output Message To Server
BufferedOutputStream bufferedOutput = new BufferedOutputStream(
output);
// output to Server
bufferedOutput.write("Client Test Running".getBytes());
bufferedOutput.flush();
// Output To Client Console
System.out.println("==============INFO================");
System.out.println("HOST:"
+ clientSocket.getSession().getPeerHost());
System.out.println("POST:"
+ clientSocket.getSession().getPeerPort());
// 显示授权信息.
X509Certificate cert = (X509Certificate) clientSocket.getSession()
.getPeerCertificates()[0];// getLocalCertificates
String subject = cert.getSubjectDN().getName();
String issuer = cert.getIssuerDN().getName();
System.out.println("Subject certificate: " + subject);
System.out.println("Issuer certificate: " + issuer);
System.out.println("==============INFO================");
System.out.println(new String(StreamToByteArray(input)));
Thread.sleep(3000);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public byte[] StreamToByteArray(InputStream inputStream) throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int readIndex = inputStream.read(buffer);
bout.write(buffer, 0, readIndex);
bout.flush();
bout.close();
inputStream.close();
return bout.toByteArray();
}
public static void main(String[] args) {
new SSLClient().Test();
}
}
客户端与服务器SSL双向认证(客户端:java-服务端:vc)
5星 · 超过95%的资源 需积分: 9 179 浏览量
2013-04-23
14:18:14
上传
评论 1
收藏 494KB RAR 举报
北海鲲鹏
- 粉丝: 13
- 资源: 6
最新资源
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
- 鱼群算法求解组环问题python源码+文档说明
- 基于决策优化的多波束测深测线规划模型MATLAB代码
- 课程设计-基于python实现的多目标优化算法求解带时间窗的车辆路径规划问题+源代码+文档说明+界面截图+pptx
- 基于通信信号与通信系统的MATLAB仿真源码-课程设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈