📄 sslclientapplet.java
字号:
import java.net.*;import java.io.*;
import java.awt.*;import java.awt.event.*;
import java.applet.*;
import java.security.*;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.*;
import com.sun.net.ssl.SSLContext;
import com.sun.net.ssl.KeyManager;
import com.sun.net.ssl.KeyManagerFactory;
import com.sun.net.ssl.TrustManager;
import com.sun.net.ssl.TrustManagerFactory;
public class sslclientapplet extends Applet implements Runnable,ActionListener
{
Button send;
TextField sendtext,recevetext;
SSLSocket socket=null;
DataOutputStream out=null;
DataInputStream in=null;
Thread thread;
private static final String HOST="172.16.28.28";
private static final int PORT=5000;
// 初始化KeyManagers对象数组;
private KeyManager[] getKeyManagers()throws IOException,
GeneralSecurityException
{
KeyStore ks=null;
KeyManagerFactory kmf=null;//KeyManager的主要职责就是选择最终会被发送给远程主机的认证凭证;
KeyManager[] keyManagers=null;
FileInputStream fis=null;
try{
fis=new FileInputStream("F:/clientcert/clientKeys");
char[] passphrase="passwordc".toCharArray();//serverkeys证书密码;
ks=KeyStore.getInstance("JKS");
ks.load(fis, passphrase);//加载serverkeys密码;
kmf=KeyManagerFactory.getInstance("SunX509");
kmf.init(ks,passphrase);
keyManagers=kmf.getKeyManagers();
fis.close();
return keyManagers;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//初始化TrustManager对象数组;
private TrustManager[] getTrustManagers()throws IOException,
GeneralSecurityException
{
KeyStore ks=null;
TrustManagerFactory tmf=null;
TrustManager[] trustManagers=null;//TrustManager的主要职责就是判断当前的认证凭证是否可信;
FileInputStream fis=null;
try{
fis=new FileInputStream("F:/clientcert/clientTrust");
char[] passphrase="passwords".toCharArray();//serverkeys证书密码;
ks=KeyStore.getInstance("JKS");
ks.load(fis,passphrase);
tmf=TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
trustManagers= tmf.getTrustManagers();
fis.close();
return trustManagers;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void init()
{ //布设页面的控件;
setLayout(new GridLayout(2,2));
Panel p1=new Panel();
Panel p2=new Panel();
send=new Button("发送");
sendtext=new TextField(20);
recevetext=new TextField(20);
p1.add(new Label("输入信息:"));
p1.add(sendtext);
p2.add(new Label("server 返回信息"));
p2.add(recevetext);
p2.add(send);
send.addActionListener(this);
add(p1);
add(p2);
}
public void start()
{ //建立好各种对象;
// 首先设置上下文环境;
SSLContext context=null;
KeyManager[] keyManagers=null;
TrustManager[] trustManagers=null;
SSLSocketFactory sf=null;
SSLSocket s=null;
Thread thread=null;
try{
keyManagers=getKeyManagers();
trustManagers=getTrustManagers();
context=SSLContext.getInstance("TLS");
//keyManagers=keyManagers.getKeyManagers();
context.init(keyManagers, trustManagers, null);
sf=context.getSocketFactory();
//得到一个套结字,并创造输入输出流;
socket=(SSLSocket)sf.createSocket(HOST,PORT);
socket.startHandshake();
//OutputStream out=s.getOutputStream();
out=new DataOutputStream(socket.getOutputStream());
in=new DataInputStream(socket.getInputStream());
//out.writeUTF("hello server");
} catch (Exception e) {
e.printStackTrace();
}
if(socket!=null)
{
if(thread ==null)
{ //启动线程,以接口的形式实行;
thread=new Thread(this);
thread.start();
}
}
}
public void run()
{
String s=null;
while(true)
{
try
{
s=in.readUTF();
System.out.println("客户端收到信息为:"+s);
recevetext.setText(s);
}
catch(IOException e)
{
//recevetext.setText("与服务器断开!");
break;
}
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==send)
{
String s=sendtext.getText();
if(s!=null)
{
try
{
out.writeUTF(s);
}
catch(IOException e1)
{}
}
}
}
public void paint(Graphics g)
{
//System.out.println("服务器端未启动!");
g.drawString("服务器端未启动!", 200, 200);
repaint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -