JKS文件是使用keytool生成的keystore文件,存放私钥和证书。但是我们用keytool的时候,私钥并没有单独生成出来。这个不利于我们后期的一些扩展工作。所以,我们需要把私钥从keytool中提取出来。
经过研究,确认如下两种方法是可靠的。
方案1:
使用OpenSSL工具来完成
1、从JKS转换到PKCS12
D:\ssl>keytool -importkeystore -srckeystore keystore_old.jks -destkeystore keystore_old.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass changeit -deststorepass changeit -srcalias tom_server -destalias xxx -srckeypass changeit -destkeypass changeit -noprompt
2、从PKCS12转换成PEM格式
openssl pkcs12 -in keystore_old.p12 -out keystore_old.pem -passin pass:changeit -passout pass:changeit
3、用记事本打开PEM格式文件,从PEM格式的certificate chain中取出私钥,保存为privateKey.key
4、生成私钥
openssl rsa -in privateKey.key -check
私钥将被显示在命令行界面上
方案2:
Keystore是一个密码保护的文件,存放私钥和证书。可以通过JDK自带的keytool工具生成。
但是keytool工具,并没有提供方便的方法,从keystore文件中到处私钥和证书。
所以可以通过JDK提供的java.security.KeyStore 类来编码完成相关工作。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import sun.misc.*;
public class ExportPrivateKey {
private File keystoreFile;
private String keyStoreType;
private char[] password;
private String alias;
private File exportedFile;
public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {
try {
Key key=keystore.getKey(alias,password);
if(key instanceof PrivateKey) {
Certificate cert=keystore.getCertificate(alias);
PublicKey publicKey=cert.getPublicKey();
return new KeyPair(publicKey,(PrivateKey)key);
}
} catch (UnrecoverableKeyException e) {
} catch (NoSuchAlgorithmException e) {
} catch (KeyStoreException e) {
}
return null;
}
public void export() throws Exception{
KeyStore keystore=KeyStore.getInstance(keyStoreType);
BASE64Encoder encoder=new BASE64Encoder();
keystore.load(new FileInputStream(keystoreFile),password);
KeyPair keyPair=getPrivateKey(keystore,alias,password);
PrivateKey privateKey=keyPair.getPrivate();
String encoded=encoder.encode(privateKey.getEncoded());
FileWriter fw=new FileWriter(exportedFile);
fw.write("—–BEGIN PRIVATE KEY—–\n");
fw.write(encoded);
fw.write("\n");
fw.write("—–END PRIVATE KEY—–");
fw.close();
}
public static void main(String args[]) throws Exception{
ExportPrivateKey export=new ExportPrivateKey();
export.keystoreFile=new File("/Users/Luke/Workspace/StringTest/src/com/lukejin/stringtest/keystore.jks");
export.keyStoreType="JKS";
export.password="changeit".toCharArray();
export.alias="tom_server";
export.exportedFile=new File("luke");
export.export();
}
}
相关推荐
密钥、密钥对、公钥、证书、、私钥、jks、keystore、truststore、cer、pfx 等概念是信息安全领域中密钥管理和加密技术的重要组成部分。下面对这些概念进行详细的解释和说明: 1. 密钥:指的是公钥和私钥的统称。...
这会从`.pfx`文件中提取私钥到`mykey.key`。 在实际应用中,`www.cnsucc.com`可能是一个网站域名,这可能意味着你需要为该域名创建一个SSL/TLS证书。`keystore-export`可能是一个包含上述操作脚本或者导出结果的...
本教程将详细讲解如何在JKS和Keystore文件之间进行转换,以及如何在命令行中执行这些操作。 首先,我们需要理解JKS和Keystore的区别。JKS是Java密钥库,是Oracle Java平台的标准密钥存储格式。而Keystore是一个更...
本文将详细讲解如何使用Java程序导出JVM KeyStore中的私钥,以及这个过程在配置SSL(Secure Sockets Layer)时的作用。 首先,我们需要了解Java KeyStore的基本概念。KeyStore是一个安全存储库,它包含了公钥、私钥...
在 WS 安全性设计中,使用 OpenSSL 生成 client.jks 与 server.jks 文件是非常必要的。下面我们将详细介绍如何使用 OpenSSL 生成这两个文件。 Step 1: 创建证书颁发机构密钥 在使用 OpenSSL 生成证书之前,我们...
- 从证书签发邮件中提取中级CA证书和服务器证书的内容,保存为cer文件。 2. 查看keystore文件内容: - 使用keytool命令列出keystore的内容,以获取PrivateKeyEntry的别名,这个别名在后续的证书导入中是必要的。...
使用`keytool`,开发者可以生成一个新的密钥对,然后将公钥证书导入JKS文件,私钥则保留在密钥库中,用于签署APK。 生成JKS文件的基本步骤如下: 1. **创建JKS文件**:使用`keytool -genkeypair`命令生成一个新的...
Keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中,缺省的密钥仓库实现将密钥仓库实现为一个文件,用口令来保护私钥。 Java KeyStore 的类型 Java KeyStore 有多种类型,常见的有 JKS、JCEKS、PKCS12...
4. **创建keystore**:将生成的私钥和证书(自签名或CA签名的)放入keystore文件中。`keytool`也可以用来完成这个步骤,指定keystore类型(如JKS或PKCS12),设置keystore密码,以及输入私钥和证书的相关信息。 5. ...
同样地,使用OpenSSL工具从PKCS12格式的证书库中提取私钥文件(server.key): ``` openssl pkcs12 -nocerts -nodes -in newkeystore.p12 -out server.key ``` 至此,我们已经成功地将JKS格式的证书文件转换为了Nginx...
`apk_keystore.jks`就是这样的一个签名文件,它包含了用于签署APK的公钥和私钥。一旦创建,`keystore`文件应妥善保管,因为丢失或忘记密钥将无法更新应用,或者在某些情况下,可能无法再发布新版本。 2. **密钥对...
`.cer`文件通常用于存储公钥证书,而`.jks`(Java Keystore)文件则是Java平台中用于存储密钥对和信任证书的标准格式。转换过程涉及使用`keytool`命令行工具,该工具是JDK的一部分。 #### 操作步骤 - 首先,确保...
Java KeyStone 文件查看编辑工具是专门针对Java安全领域中的JKS(Java Keystore)文件而设计的实用程序。JKS文件是Java平台用于存储证书、密钥对以及信任证书的容器,它在加密通信、SSL/TLS协议以及服务器身份验证等...
3:如果出现 Unsupported major.minor version 52.0 则表示该文件的版本与本地的jdk版本不匹配 经测试 jdk1.7.0使用1.05版本的AndroidKeystore jdk1.8.0使用1.07版本的AndroidKeystore (资源里面两个版本的都有) ...
此文件通常包含私钥,是Windows系统中常见的证书格式。 #### PFX转JKS 使用JWSDP工具包中的`pkcs12import`工具将PFX文件转换为JKS格式。执行以下命令: ```bash C:\Sun\jwsdp-2.0\xws-security\bin\pkcs12import....
在Java开发中,密钥库是存储公钥、私钥、证书等安全信息的文件,而JKS(Java KeyStore)是Java平台默认使用的密钥库格式。然而,在Android平台上,出于兼容性和性能考虑,它更倾向于使用BKS(Bouncy Castle KeyStore...
在相反的转换过程中,即从JKS转换为PKCS12,命令会略有不同: ```bash keytool -importkeystore -srckeystore mycert.jks -destkeystore mycert.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass ...
在Java中,KeyStore是存储密钥和证书的容器,它可以保存用户的私钥对、服务器的证书、证书链以及受信任的CA证书。KeyStore对象通过`java.security.KeyStore`类来表示,它支持多种类型的存储格式,如JKS(Java ...
其中,server 是私钥别名,生成的 keystore.jks 文件默认放在命令行当前路径下。 生成证书请求文件 (CSR) 使用 keytool 工具生成证书请求文件,命令如下: ``` keytool -certreq -alias server -sigalg MD5withRSA...