zoukankan      html  css  js  c++  java
  • java网络编程5-SSL

    服务器端

    System.out.println("等待客户端连接...");
    File keyFile=new File("C:/Users/mu/Desktop/mu.p12");
    InputStream stream=new FileInputStream(keyFile);
    char[] password="123456".toCharArray();
    
    //KeyStore用于存放证书,创建对象时 指定交换数字证书的加密标准
    KeyStore keyStore=KeyStore.getInstance("pkcs12"); //KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(stream, password);
    stream.close();
    
    //KeyManager选择证书证明自己的身份
    KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    keyManagerFactory.init(keyStore,password);
    KeyManager[] keyManagers=keyManagerFactory.getKeyManagers();
    
    //TrustManager决定是否信任对方的证书
    TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(keyStore);
    TrustManager[] trustManagers=trustManagerFactory.getTrustManagers();
    
    SSLContext context=SSLContext.getInstance("SSL");
    context.init(keyManagers, trustManagers, null);
    SSLServerSocketFactory factory=context.getServerSocketFactory();
    SSLServerSocket serverSocket=(SSLServerSocket)factory.createServerSocket(3344);
    SSLSocket socket=(SSLSocket)serverSocket.accept();
    
    System.out.println("有客户端连接");
    System.out.println("向客户端输出信息");
    OutputStream outputStream=socket.getOutputStream();
    BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(outputStream));
    writer.write("hello world
    ");
    writer.write("
    ");
    writer.flush();
    System.out.println("输出结束");
    socket.close();
    serverSocket.close();

    客户端

    System.out.println("准备连接服务端");
    File keyFile=new File("C:/Users/mu/Desktop/mu.p12");
    InputStream stream=new FileInputStream(keyFile);
    char[] password="123456".toCharArray();
    
    //指定交换数字证书的加密标准
    KeyStore keyStore= KeyStore.getInstance("pkcs12");//KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(stream, password);
    stream.close();
    
    //TrustManager决定是否信任对方的证书
    TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(keyStore);
    TrustManager[] trustManagers=trustManagerFactory.getTrustManagers();
    
    SSLContext context=SSLContext.getInstance("SSL");
    context.init(null, trustManagers, null);
    SSLSocketFactory factory=context.getSocketFactory();
    SSLSocket socket=(SSLSocket) factory.createSocket("localhost", 3344);
    
    InputStream inputStream=socket.getInputStream();
    BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
    String str=null;
    while ((str=reader.readLine())!=null) {
        if(str.equals(""))
            break;
        System.out.println(str);
    }
    socket.close();
  • 相关阅读:
    MySQL之ERROR 1558 (HY000): Column count of mysql.user is wrong.解决方案
    手动发布本地jar包到Nexus私服
    Git的常用命令
    手游录屏直播技术详解 | 直播 SDK 性能优化实践
    【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控
    【容器云】传统金融企业的 Docker 实践
    直播推流端弱网优化策略 | 直播 SDK 性能优化实践
    云存储之覆盖上传——七牛云
    「视频直播技术详解」系列之七:直播云 SDK 性能测试模型
    「视频直播技术详解」系列之六:现代播放器原理
  • 原文地址:https://www.cnblogs.com/mu-mu/p/4065260.html
Copyright © 2011-2022 走看看