sslsocket实例

1、Keytool是java自带的证书制作工具(命令格式 keytool 功能 参数 参数)。也可以使用更强大openssl工具。
2、生成密钥对
   keytool -genkey -alias winkey2 -keystore winKeyStore.jks
   需要给出密钥的名称-alias winkey2,密钥仓库 winKeyStore.jks。没有这个文件就会自动新建一个,有的话就会将创建的密钥追加进去。
3、密钥仓库有密码,可以存储多个密钥,也可以删除其中的密钥。
   keytool -list -keystore winKeyStore.jks  
   keytool -delete -keystore winKeyStore.jks   --如果不写密钥名称,则提示输入密钥名称
4、制作证书
   keytool -export -alias ssl1 -file d:/ssl1.cer -keystore d:/serverkey.jks
5、导入证书到另外一个keystore
   keytool -import -file gfssl.cer -keystore trustKeyStore.jks
6、-genkey 和 -genkeypair 功能相同,早期是-genkey,后来改为-genkeypair,为了向前兼容,两个都保留了。
   参见官方的帮助文档 http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html
   百度搜索 keytool oracle

7、java sslsocket例子

import javax.net.ssl.SSLServerSocketFactory;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyStore;
public class ServerSocket {
    public static void main(String[] args) throws Exception {
        System.setProperty("javax.net.ssl.keyStore","/code/java/keystore/mykeystore.jks");
        System.setProperty("javax.net.ssl.keyStorePassword","gaofeng");
        ServerSocket socket = SSLServerSocketFactory.getDefault().createServerSocket(40001);
        while (true){
            Socket s = socket.accept();
            new MyThread(s).start();
        }
    }
}
class MyThread extends Thread{
    private Socket s;
    public MyThread(Socket s){
        this.s = s;
    }
    @Override
    public void run() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
            OutputStream writer = s.getOutputStream();
            writer.write(("hello,"+s.getInetAddress()+"\n").getBytes());
            while(true){
                String info = reader.readLine();
                if(info.equals("Bye")){
                    break;
                }else{
                    System.out.println(info);
                    writer.write((info+":"+ System.currentTimeMillis() +"\n").getBytes());
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

8、client的例子

import java.net.Socket;
import javax.net.ssl.SSLSocketFactory;
public class SocketClient {
    public static void main(String[] args) throws Exception {
        System.setProperty("javax.net.ssl.trustStore","D:/test/trustKeyStore.jks");//设置可信任的密钥仓库
        System.setProperty("javax.net.ssl.trustStorePassword","gaofeng"); //设置可信任的密钥仓库的密码
        Socket csocket = SSLSocketFactory.getDefault().createSocket("192.168.100.1", 40001);// 创建并连接服务器
        BufferedReader socketIn = new BufferedReader(new InputStreamReader(csocket.getInputStream()));// 接受到的信息
        BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in));// 用户输入信息
        while (true) {
            String s = socketIn.readLine();
            System.out.println("Server Message: " + s);
            String s2 = userIn.readLine();
            csocket.getOutputStream().write((s2 + "\n").getBytes());
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值