`
xiaodonggm
  • 浏览: 14197 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

证书工具类

 
阅读更多

证书工具类:

import java.io.FileInputStream;
import java.io.StringWriter;
import java.io.Writer;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

import org.bouncycastle.openssl.PEMWriter;

/**
 * 证书操作工具类
 */
public class CaUtils {

	public static final String KEY_STORE = "JKS";

	public static final String X509 = "X.509";

	public static final String SunX509 = "SunX509";

	public static final String SSL = "SSL";

	/**
	 * 获取KeyStore
	 * @param keyStorePath
	 * @param password
	 * @return KeyStore
	 * @throws Exception
	 */
	public static KeyStore getKeyStore(String keyStorePath,String password)throws Exception
	{
		FileInputStream fis = new FileInputStream(keyStorePath);
		KeyStore ks = KeyStore.getInstance(KEY_STORE);
		ks.load(fis, password.toCharArray());
		fis.close();
		return ks;
	}

	/**
	 * 获取Certificate
	 * @param certificatePath
	 * @return Certificate
	 * @throws Exception
	 */
	public static Certificate getCertificate(String certificatePath)throws Exception
	{
		CertificateFactory certificateFactory = CertificateFactory.getInstance(X509);
		FileInputStream fis = new FileInputStream(certificatePath);
		Certificate certificate = certificateFactory.generateCertificate(fis);
		fis.close();
		return certificate;
	}

	/**
	 * 获取私钥
	 * @param keyStorePath
	 * @param alias
	 * @param password
	 * @return PrivateKey
	 * @throws Exception
	 */
	public static PrivateKey getPrivateKey(String keyStorePath,String alias,String password)throws Exception
	{
		KeyStore ks = getKeyStore(keyStorePath, password);
		PrivateKey privateKey = (PrivateKey) ks.getKey(alias, password.toCharArray());
		return privateKey;
	}

	/**
	 * 获取公钥
	 * @param certificatePath
	 * @return PublicKey
	 * @throws Exception
	 */
	public static PublicKey getPublicKey(String certificatePath)throws Exception
	{
		Certificate certificate = getCertificate(certificatePath);
		PublicKey publicKey = certificate.getPublicKey();
		return publicKey;
	}

	/**
	 * 获取公钥
	 * @param keyStorePath
	 * @param alias
	 * @param password
	 * @return PublicKey
	 * @throws Exception
	 */
	public static PublicKey getPublicKey(String keyStorePath,String alias,String password)throws Exception
	{
		KeyStore ks = getKeyStore(keyStorePath, password);
		Certificate cert = ks.getCertificate(alias);
		PublicKey publicKey = cert.getPublicKey();
		return publicKey;
	}

	/**
	 * Key转换为Pem格式
	 * @param Key
	 * @return 字符串(Pem格式)
	 * @throws Exception
	 */
	public static String changeKeyToPem(Key key)throws Exception
	{
		PEMWriter pemWriter;
		try {
			Writer writer = new StringWriter();
			pemWriter = new PEMWriter(writer);
			pemWriter.writeObject(key);
			pemWriter.flush();
			pemWriter.close();
			return writer.toString();
		} finally {
			pemWriter = null;
		}
	}

	/**
	 * 获得SSLSocketFactory
	 * @param password
	 * @param keyStorePath
	 * @param trustKeyStorePath
	 * @return SSLSocketFactory
	 * @throws Exception
	 */
	public static SSLSocketFactory getSSLSocketFactory(String password,String keyStorePath, String trustKeyStorePath) throws Exception
	{
		// 初始化密钥库
		KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(SunX509);
		KeyStore keyStore = getKeyStore(keyStorePath, password);
		keyManagerFactory.init(keyStore, password.toCharArray());
		// 初始化信任库
		TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(SunX509);
		KeyStore trustkeyStore = getKeyStore(trustKeyStorePath, password);
		trustManagerFactory.init(trustkeyStore);
		// 初始化SSL上下文
		SSLContext ctx = SSLContext.getInstance(SSL);
		ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
		SSLSocketFactory sf = ctx.getSocketFactory();
		return sf;
	}

	/**
	 * 获取密钥对
	 * @param keyStorePath
	 * @param alias
	 * @param password
	 * @return KeyPair
	 * @throws Exception
	 */
	public static KeyPair getKeyPair(String keyStorePath,String alias,String password)throws Exception
	{
		KeyStore ks = getKeyStore(keyStorePath, password);
		Key key = ks.getKey(alias, password.toCharArray());
		if (key instanceof PrivateKey)
        {
			Certificate cert = ks.getCertificate(alias);
            PublicKey publicKey = cert.getPublicKey();
            return new KeyPair(publicKey, (PrivateKey) key);
        }else
        {
        	return null;
        }
	}

}

 

分享到:
评论

相关推荐

    Java生成证书工具类

    编译:javac InstallCert.java 运行:java InstallCert 要访问的网址 最后面会输出: Enter certificate to add to trusted keystore or 'q' to quit: [1] ...将证书copy到$JAVA_HOME/jre/lib/security目录下

    Https单向认证忽略证书工具类

    Https单向认证忽略证书工具类,自定义TrustManager和HostnameVerifier,适用于OkHttp和HttpURLConnection

    Java 生成证书工具类 https

    java生成https安全证书,解决httpClient访问https出错 编译:javac InstallCert.java 运行:java InstallCert 要访问的网址 ...输入1确认生成jssecacerts文件,将证书copy到$JAVA_HOME/jre/lib/security目录下

    java证书导入工具

    证书导入工具有助于将这些证书添加到Java的信任库,以便Java运行时能够识别并信任这些服务器。 首先,了解Java的信任库——cacerts。这是Java标准安装中自带的一个包含了根证书颁发机构(CA)的证书集合。当Java...

    java_android_Https 证书工具类的标准代码

    一些工具类代码块的标准代码: SSL双向认证 获得双向认证所需的参数

    https的get和post请求,去除ssl校验的java工具类

    java的get和post请求,获取json的工具类,https时会存在ssl校验的问题,工具会自动去除ssl校验。

    java信任SSL证书的工具类

    java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用

    Java证书打印工具类

    在Java编程环境中,有时我们需要将证书或者其他文档进行打印,这时就需要用到打印工具类。"Java证书打印工具类"就是一种专门用于简化证书打印过程的代码封装,它可以帮助开发者高效地完成证书模板的设计和文本的定位...

    http通用工具类

    9. **证书和SSL/TLS支持**:对于HTTPS请求,工具类应能处理SSL证书,支持自签名证书和信任的CA证书。 10. **缓存策略**:可配置缓存策略,如基于HTTP头的Last-Modified或ETag来实现缓存。 11. **GZIP压缩**:支持...

    Java发 Https请求工具类 支持SSL

    4. **Java HTTPS工具类**: 工具类封装了HTTPS请求的实现细节,包括证书管理、SSL上下文配置等,使得开发者无需深入了解底层实现即可方便地发送HTTPS请求。 5. **SSL配置**: 在Java中,为了支持SSL,需要设置`SSL...

    JAVA关于SSL证书请求的CSR文件及用户秘钥的生成工具类

    工具内容有完整的CSR生成及对应秘钥保存,使用java.securtiy Signature类

    HttpUtils 发送http请求工具类(实例讲解)

    该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...

    Java实现的Https请求工具类

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全通信协议,用于在客户端和服务器之间建立...在实际项目中,这样的工具类能够提高代码的可复用性和维护性,降低网络请求的复杂度。

    okhttp关于https封装的几个工具类

    在IT行业中,网络通信是应用程序的核心部分,尤其是对于Android开发者来说。...本文将详细讲解OkHttp如何封装HTTPS通信...在实际开发中,根据项目需求,我们可以对这些工具类进行扩展和调整,以满足特定的安全和性能需求。

    http get post 请求接口工具类

    本主题主要关注的是通过GET和POST方式与服务器进行交互的工具类,以及相关的安全措施,如参数加密、RSA签名和字符集转换。 1. **HTTP请求方式**: - GET:GET请求是最常见的HTTP方法,用于从服务器获取资源。它将...

    生成SSL证书文件工具类

    生成证书文件的工具类

    证书签名加密工具类

    证书签名加密工具类 CertificateUtils

    Https请求工具类,Java实现http请求,https请求

    Https请求工具类,Java实现http请求,https请求 本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https...该工具类可以用于各种Java应用程序中,例如Web应用程序、移动应用程序等。

    HttpClient接口调用工具类(附带demo)

    这个工具类可能封装了上述四个方法,为开发者提供便利的API,例如`post(String url, Map, String> params)`、`get(String url)`、`put(String url, Map, String> params)`和`delete(String url)`。这样的设计使得在...

Global site tag (gtag.js) - Google Analytics