常用的证书库:
JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型,JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。
JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDES)
PKCS#12(PFX)是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。
BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作。
UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish加密,因此keystore能够防止被误改、察看以及校验。SunJDK允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。
PFX转成JKS
public static final String PKCS12 = "PKCS12";
public static final String JKS = "JKS";
/**
* PFX证书转换为JKS(Java Key Store)
*
* @param pfxPassword
* PFX证书密码
* @param pfxFilePath
* PFX证书路径
* @param jksPassword
* JKS证书密码
* @param jksFilePath
* JKS证书路径
*/
public static void covertPFXtoJKS(String pfxPassword, String pfxFilePath, String jksPassword, String jksFilePath)
{
FileInputStream fis = null;
FileOutputStream out = null;
try
{
// 加载PFX证书
KeyStore inputKeyStore = KeyStore.getInstance(PKCS12);
fis = new FileInputStream(pfxFilePath);
char[] inPassword = pfxPassword == null ? null : pfxPassword.toCharArray();
char[] outPassword = jksPassword == null ? null : jksPassword.toCharArray();
inputKeyStore.load(fis, inPassword);
KeyStore outputKeyStore = KeyStore.getInstance(JKS);
outputKeyStore.load(null, outPassword);
Enumeration<String> enums = inputKeyStore.aliases();
while (enums.hasMoreElements())
{
String keyAlias = enums.nextElement();
if (inputKeyStore.isKeyEntry(keyAlias))
{
Key key = inputKeyStore.getKey(keyAlias, inPassword);
Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
outputKeyStore.setKeyEntry(keyAlias, key, pfxPassword.toCharArray(), certChain);
}
}
out = new FileOutputStream(jksFilePath);
outputKeyStore.store(out, outPassword);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (fis != null)
{
fis.close();
}
if (out != null)
{
out.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
从JKS格式转换为PKCS12格式
/**
* 从JKS格式转换为PKCS12格式
*
* @param jksFilePath
* String JKS格式证书库路径
* @param jksPasswd
* String JKS格式证书库密码
* @param pfxFilePath
* String PKCS12格式证书库保存文件夹
* @param pfxPasswd
* String PKCS12格式证书库密码
*/
public void covertJSKToPFX(String jksFilePath, String jksPasswd, String pfxFolderPath, String pfxPasswd) throws Throwable
{
FileInputStream fis = null;
try
{
KeyStore inputKeyStore = KeyStore.getInstance(JKS);
fis = new FileInputStream(jksFilePath);
char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray();
char[] destPwd = pfxPasswd == null ? null : pfxPasswd.toCharArray();
inputKeyStore.load(fis, srcPwd);
KeyStore outputKeyStore = KeyStore.getInstance(PKCS12);
Enumeration<String> enums = inputKeyStore.aliases();
while (enums.hasMoreElements())
{
String keyAlias = (String) enums.nextElement();
System.out.println("alias=[" + keyAlias + "]");
outputKeyStore.load(null, destPwd);
if (inputKeyStore.isKeyEntry(keyAlias))
{
Key key = inputKeyStore.getKey(keyAlias, srcPwd);
Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
outputKeyStore.setKeyEntry(keyAlias, key, destPwd, certChain);
}
String fName = pfxFolderPath + "_" + keyAlias + ".pfx";
FileOutputStream out = new FileOutputStream(fName);
outputKeyStore.store(out, destPwd);
out.close();
outputKeyStore.deleteEntry(keyAlias);
}
} finally
{
try
{
if (fis != null)
{
fis.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
列出所有X509证书的属性,功能类似于keytool -list
/**
* 列出JKS库内所有X509证书的属性
*
* @param jksFilePath
* 证书库路径
* @param jksPasswd
* 证书库密码
* @param algName
* 库类型
*/
public static void listAllCerts(String jksFilePath, String jksPasswd, String algName)
{
try
{
char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray();
FileInputStream in = new FileInputStream(jksFilePath);
KeyStore ks = KeyStore.getInstance(algName);
ks.load(in, srcPwd);
Enumeration<String> e = ks.aliases();
while (e.hasMoreElements())
{
String alias = e.nextElement();
Certificate cert = ks.getCertificate(alias);
if (cert instanceof X509Certificate)
{
X509Certificate X509Cert = (X509Certificate) cert;
System.out.println("**************************************");
System.out.println("版本号:" + X509Cert.getVersion());
System.out.println("序列号:" + X509Cert.getSerialNumber().toString(16));
System.out.println("主体名:" + X509Cert.getSubjectDN());
System.out.println("签发者:" + X509Cert.getIssuerDN());
System.out.println("有效期:" + X509Cert.getNotBefore());
System.out.println("签名算法:" + X509Cert.getSigAlgName());
System.out.println("输出证书信息:\n" + X509Cert.toString());
System.out.println("**************************************");
}
}
} catch (Exception e)
{
e.printStackTrace();
}
}
分享到:
相关推荐
java 生成的有私钥的证书导入IE,或者把IE导出的证书导入java的KeyStore
在使用signapk工具签名时,是需要 x509.pem + pk8格式的证书,它是一个公私钥分开存放的格式,在电脑上生成的证书一般是以 keystore格式存放的,有时在证书签发机构申请的证书也是 keystore格式的。这时用signapk...
标题提到的"keystoke证书转换nginx证书工具"是一个帮助管理员处理SSL/TLS证书的实用程序,特别针对从Java的`keytool.exe`生成的`.keystore`格式证书进行转换。`keytool`是Java Development Kit (JDK) 自带的一个...
3. **格式转换**:例如,Protecle可以帮助我们将P12(PKCS#12)格式的证书转换为BKS(Bouncy Castle Keystore)格式,适用于Android设备。BKS是Android系统推荐使用的密钥库格式。 4. **管理KeyStore**:可以查看和...
由于生成的证书是jks格式,nginx不能直接用,需要要转成PEM格式,这要用到jks2pfx工具进行转换。 jks2pfx的命令格式:JKS2PFX.bat keystore password alias exportname keystore:KeyStore文件绝对路径 password:...
直接运行即可,前提是证书请放在bat文件同目录下
本文将详细介绍如何将PFX格式的证书转换为适用于Tomcat的JKS格式,并完成整个替换过程。 #### 安装Java环境 首先确保计算机上已经安装了Java环境。根据文档描述,建议安装J2SE 1.5版本,可以通过下载并运行`jdk-1_...
除了转换,`keytool`还可以用于查看密钥信息、导入或导出证书、创建新的密钥对等操作。例如,你可以使用`-list`参数查看Keystore中的密钥信息: ```bash keytool -list -v -keystore myapp.keystore ``` 这个过程中...
本文将详细介绍如何在不同的证书格式之间进行转换,包括从`.cer`到`.jks`、从`.jks`到`.cer`、从`.p12`到`.pem`以及从`.cer`到`.pem`的过程。 ### 1. `.cer`格式转换至`.jks`格式 #### 背景介绍 `.cer`文件通常...
### Nginx证书转换jks知识点详解 #### 一、背景与目的 在现代Web服务部署中,Nginx作为一款高性能的HTTP和反向代理Web服务器,被广泛应用于多种场景之中,尤其是在需要进行SSL/TLS加密通信时更是不可或缺。然而,...
keystore转pem则表示将keystore中的公钥证书转换为x509.pem格式,这是一种常见的公钥证书格式,易于阅读和交换。 压缩包内的文件包括: 1. `signapk.jar`:这是一个用于签名APK的工具,由Google官方提供。它需要pk...
它将keystore中的私钥导出为pk8格式,然后使用openssl工具将pk8和公钥证书转换为x509.pem格式。 对于Linux或Unix用户,keystore2pem.sh的工作原理相似,但可能需要先确保openssl工具已经安装。运行脚本时,同样需要...
在描述中提到的证书转换,主要包括P12到BKS以及BKS到P12的过程。 首先,我们来了解下这些证书格式: 1. **P12**:也称为PKCS#12,是由RSA Security开发的个人身份信息交换格式,用于存储用户的私钥、公钥和证书。...
广泛的格式支持KeyStore Explorer支持多种KeyStore,密钥对,私钥和证书格式,并可在它们之间进行转换。请参阅功能,以获取受支持格式的列表。 CA的基本功能KeyStore Explorer可以用于创建自己的CA证书并使用它签名...
本文将深入探讨“数字证书查看、拆分和格式转换工具”这一主题,涉及的关键词包括“SSL”、“keystore”、“crt”和“key”。 首先,让我们了解SSL(Secure Sockets Layer)和它的升级版TLS(Transport Layer ...
Windows用户如果拥有以.keystore格式存在的证书,可以通过JKS2PFX转换工具将keystore证书转换成PEM格式的证书。而Linux或OSX系统用户则需要使用openssl工具来生成密钥和证书。 生成服务器密钥和证书申请文件的步骤...
**SSL证书格式转换详解** 在数字证书领域,SSL(Secure ...通过上述步骤,你可以轻松地将证书转换为适应Android系统的格式,确保应用的网络通信安全。在实际操作中,务必遵循最佳安全实践,确保数据的完整性和保密性。
Java中的KeyStore是用于存储证书、密钥对和信任证书的重要工具,主要应用于安全通信,如SSL/TLS协议。在Java环境中,keytool是用于管理KeyStore的命令行工具,可以进行证书的创建、导入、导出等操作。本文将详细讲解...
`keystore2pk8.zip`文件包包含了一套工具和指南,用于将Android的`.keystore`签名文件转换为`.pk8`(私钥)和`.x509.pem`(证书)格式。这个过程对于理解Android应用签名机制以及在不同场景下处理签名文件非常有帮助...
pfx证书安装 ...下面将详细介绍pfx证书安装的步骤和相关知识点。 pfx证书格式 ...需要将pfx格式证书转换为JKS格式证书或PFX格式证书,然后在server.xml文件中添加keystoreFile和keystoreType属性。