解释代码 - SSL

时间:2015-08-20 10:31:31

标签: java ssl keystore

任何人都可以解释下面的代码(标有“HERE”)。

  1. Keystore.load()执行什么?
  2. 为何使用KeyManagerFactory
  3. 我需要以实际为导向的解决方案。

    System.setProperty("1", "/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre");
    
    String jrehome = System.getProperty("1");
    String path = jrehome + "/" + "lib" + "/" + "security" + "/" + "cacerts";
    char[] ksPass= "changeit".toCharArray();
    
    try {
        KeyStore ks = KeyStore.getInstance("JKS"); // <- HERE
        System.out.println(ks.toString());
        ks.load(new FileInputStream(path), ksPass);
    
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, ksPass);
    
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
        System.out.println(ks.getCertificate("SunX509"));
        tmf.init(ks);
    
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.getClientSessionContext().setSessionCacheSize(1);
        sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        SSLServerSocketFactory ssf = sc.getServerSocketFactory();
    
        SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(8888); // <-- HERE
    
        System.out.println("Server started:");
    }
    

1 个答案:

答案 0 :(得分:1)

  1. Keystore.load()是访问密钥库的强制性调用,否则您无法访问密钥库。 Javadoc这样说。加载密钥库后,可以从密钥库中读取现有条目,或将新条目写入密钥库。您有一些load()的重载方法。

  2. KeyManagerFactory是一个遵循工厂模式的类,它创建密钥管理器实例,用于管理特定类型的密钥材料以供安全套接字使用。