All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dahuatech.hutool.http.ssl.SSLSocketFactoryBuilder Maven / Gradle / Ivy

There is a newer version: 1.0.13.7
Show newest version
package com.dahuatech.hutool.http.ssl;

import com.dahuatech.hutool.core.util.ArrayUtil;
import com.dahuatech.hutool.core.util.StrUtil;
import com.dahuatech.icc.util.StringUtils;

import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

/**
 * SSLSocketFactory构建器
 *
 * @author Looly
 */
public class SSLSocketFactoryBuilder {

  /** Supports some version of SSL; may support other versions */
  public static final String SSL = "SSL";
  /** Supports SSL version 2 or later; may support other versions */
  public static final String SSLv2 = "SSLv2";
  /** Supports SSL version 3; may support other versions */
  public static final String SSLv3 = "SSLv3";
  /** Supports some version of TLS; may support other versions */
  public static final String TLS = "TLS";
  /** Supports RFC 2246: TLS version 1.0 ; may support other versions */
  public static final String TLSv1 = "TLSv1";
  /** Supports RFC 4346: TLS version 1.1 ; may support other versions */
  public static final String TLSv11 = "TLSv1.1";
  /** Supports RFC 5246: TLS version 1.2 ; may support other versions */
  public static final String TLSv12 = "TLSv1.2";

  private String protocol = TLS;
  private KeyManager[] keyManagers;
  private TrustManager[] trustManagers = {new DefaultTrustManager()};
  private SecureRandom secureRandom = new SecureRandom();

  /**
   * 创建 SSLSocketFactoryBuilder
   *
   * @return SSLSocketFactoryBuilder
   */
  public static SSLSocketFactoryBuilder create() {
    return new SSLSocketFactoryBuilder();
  }

  /**
   * 设置协议
   *
   * @param protocol 协议
   * @return 自身
   */
  public SSLSocketFactoryBuilder setProtocol(String protocol) {
    if (StrUtil.isNotBlank(protocol)) {
      this.protocol = protocol;
    }
    return this;
  }

  /**
   * 设置信任信息
   *
   * @param trustManagers TrustManager列表
   * @return 自身
   */
  public SSLSocketFactoryBuilder setTrustManagers(TrustManager... trustManagers) {
    if (ArrayUtil.isNotEmpty(trustManagers)) {
      this.trustManagers = trustManagers;
    }
    return this;
  }

  /**
   * 设置 JSSE key managers
   *
   * @param keyManagers JSSE key managers
   * @return 自身
   */
  public SSLSocketFactoryBuilder setKeyManagers(KeyManager... keyManagers) {
    if (ArrayUtil.isNotEmpty(keyManagers)) {
      this.keyManagers = keyManagers;
    }
    return this;
  }

  /**
   * 设置 SecureRandom
   *
   * @param secureRandom SecureRandom
   * @return 自己
   */
  public SSLSocketFactoryBuilder setSecureRandom(SecureRandom secureRandom) {
    if (null != secureRandom) {
      this.secureRandom = secureRandom;
    }
    return this;
  }

  /**
   * 构建SSLSocketFactory
   *
   * @return SSLSocketFactory
   * @throws NoSuchAlgorithmException 无此算法
   * @throws KeyManagementException Key管理异常
   */
  public SSLSocketFactory build() throws NoSuchAlgorithmException, KeyManagementException {
      String version = System.getProperty("java.version");
      SSLContext sslContext = null;
      if(!StringUtils.isEmpty(version) && version.startsWith("1.7")){
          sslContext = SSLContext.getInstance(TLSv12);
      }else{
          sslContext = SSLContext.getInstance(protocol);
      }
    sslContext.init(this.keyManagers, this.trustManagers, this.secureRandom);
    return sslContext.getSocketFactory();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy