证书工具类:
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;
}
}
}
分享到:
相关推荐
编译:javac InstallCert.java 运行:java InstallCert 要访问的网址 最后面会输出: Enter certificate to add to trusted keystore or 'q' to quit: [1] ...将证书copy到$JAVA_HOME/jre/lib/security目录下
Https单向认证忽略证书工具类,自定义TrustManager和HostnameVerifier,适用于OkHttp和HttpURLConnection
java生成https安全证书,解决httpClient访问https出错 编译:javac InstallCert.java 运行:java InstallCert 要访问的网址 ...输入1确认生成jssecacerts文件,将证书copy到$JAVA_HOME/jre/lib/security目录下
证书导入工具有助于将这些证书添加到Java的信任库,以便Java运行时能够识别并信任这些服务器。 首先,了解Java的信任库——cacerts。这是Java标准安装中自带的一个包含了根证书颁发机构(CA)的证书集合。当Java...
一些工具类代码块的标准代码: SSL双向认证 获得双向认证所需的参数
java的get和post请求,获取json的工具类,https时会存在ssl校验的问题,工具会自动去除ssl校验。
java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
在Java编程环境中,有时我们需要将证书或者其他文档进行打印,这时就需要用到打印工具类。"Java证书打印工具类"就是一种专门用于简化证书打印过程的代码封装,它可以帮助开发者高效地完成证书模板的设计和文本的定位...
9. **证书和SSL/TLS支持**:对于HTTPS请求,工具类应能处理SSL证书,支持自签名证书和信任的CA证书。 10. **缓存策略**:可配置缓存策略,如基于HTTP头的Last-Modified或ETag来实现缓存。 11. **GZIP压缩**:支持...
4. **Java HTTPS工具类**: 工具类封装了HTTPS请求的实现细节,包括证书管理、SSL上下文配置等,使得开发者无需深入了解底层实现即可方便地发送HTTPS请求。 5. **SSL配置**: 在Java中,为了支持SSL,需要设置`SSL...
工具内容有完整的CSR生成及对应秘钥保存,使用java.securtiy Signature类
该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...
在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全通信协议,用于在客户端和服务器之间建立...在实际项目中,这样的工具类能够提高代码的可复用性和维护性,降低网络请求的复杂度。
在IT行业中,网络通信是应用程序的核心部分,尤其是对于Android开发者来说。...本文将详细讲解OkHttp如何封装HTTPS通信...在实际开发中,根据项目需求,我们可以对这些工具类进行扩展和调整,以满足特定的安全和性能需求。
本主题主要关注的是通过GET和POST方式与服务器进行交互的工具类,以及相关的安全措施,如参数加密、RSA签名和字符集转换。 1. **HTTP请求方式**: - GET:GET请求是最常见的HTTP方法,用于从服务器获取资源。它将...
生成证书文件的工具类
证书签名加密工具类 CertificateUtils
Https请求工具类,Java实现http请求,https请求 本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https...该工具类可以用于各种Java应用程序中,例如Web应用程序、移动应用程序等。
这个工具类可能封装了上述四个方法,为开发者提供便利的API,例如`post(String url, Map, String> params)`、`get(String url)`、`put(String url, Map, String> params)`和`delete(String url)`。这样的设计使得在...