⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customkeystoreclient.java

📁 jsse使用范例
💻 JAVA
字号:
import javax.net.ssl.*;import java.io.*;import java.security.*;/** * 该类演示了如何创建和配置KeyStore.它加载了名为"ClientKeys"的KeyStore.  * 也通过命令行参数可以设置加载的KeyStore. */class CustomKeyStoreClient extends SimpleSSLClient{  private final String DEFAULT_KEYSTORE="clientKeys";  private final String DEFAULT_KEYSTORE_PASSWORD="password";  private String keyStore=DEFAULT_KEYSTORE;  private String keyStorePassword=DEFAULT_KEYSTORE_PASSWORD;  /**   * 该方法覆盖了SimpleSSLClient类中的main()方法,目的是为了使用   * CustomKeyStoreClient.   */  public static void main(String args[])  {    CustomKeyStoreClient client=new CustomKeyStoreClient();    client.runClient(args);    client.close();  }  /**   * 该方法覆盖了SimpleSSLClient类中的handleCommandLineOption()方法.   * 现在该方法可以处理-ks和-kspass参数了.   */  protected int handleCommandLineOption(String[] args, int i)  {    int out;    try {      String arg=args[i].trim().toUpperCase();      // 这里仅仅处理了-ks和-kspass参数,其他参数传递给父类中的方法处理.      if (arg.equals("-KS")) {        keyStore=args[i+1];        out=2;      }      else if (arg.equals("-KSPASS")) {        keyStorePassword=args[i+1];        out=2;      }      else out=super.handleCommandLineOption(args,i);    }    catch(Exception e) {      // 解析参数时发生了错误.      out=0;    }    return out;  }  /**   * 显示命令行的使用方法.   */  protected void displayUsage()  {    super.displayUsage();    System.out.println("\t-ks\tkeystore (default '"                       +DEFAULT_KEYSTORE+"', JKS format)");    System.out.println("\t-kspass\tkeystore password (default '"                       +DEFAULT_KEYSTORE_PASSWORD+"')");  }  /**   * 提供了一个SSLSocketFactory对象.该对象忽略JSSE选择的keystore,   * 而使用在代码中指定的文件名和密钥,如果命令行中指定了文件名和密钥,则使用   * 在命令行中指定的信息.   * 该方法调用getKeyManagers()方法完成大部分的核心工作.在该方法中只需要   * 创建一个SSLContext对象,然后从该对象中获得SSLSocketFactory对象.   */  protected SSLSocketFactory getSSLSocketFactory()    throws IOException, GeneralSecurityException  {    // 调用getKeyManagers方法获得key manager    KeyManager[] kms=getKeyManagers();    // 利用KeyManagers创建一个SSLContext对象. 我们使用空的TrustManager和	// SecureRandom对象作为参数初始化SSLContext对象,这样JSSE会使用默认	// TrustManager和SecureRandom对象.    SSLContext context=SSLContext.getInstance("SSL");    context.init(kms, null, null);    // 最后获得了SocketFactory对象.    SSLSocketFactory ssf=context.getSocketFactory();    return ssf;  }  /**   * 该方法返回一组KeyManagers对象,这些对象使用指定的KeyStore.   */  protected KeyManager[] getKeyManagers()    throws IOException, GeneralSecurityException  {    // 获得KeyManagerFactory对象.    String alg=KeyManagerFactory.getDefaultAlgorithm();    KeyManagerFactory kmFact=KeyManagerFactory.getInstance(alg);        // 配置KeyManagerFactory对象使用的KeyStoree.我们通过一个文件加载    // KeyStore.    FileInputStream fis=new FileInputStream(keyStore);    KeyStore ks=KeyStore.getInstance("jks");    ks.load(fis, keyStorePassword.toCharArray());    fis.close();    // 使用获得的KeyStore初始化KeyManagerFactory对象    kmFact.init(ks, keyStorePassword.toCharArray());    // 获得KeyManagers对象    KeyManager[] kms=kmFact.getKeyManagers();    return kms;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -