java提取jks文件提取私钥,从keystore(jks)文件中提取私钥

jdk处理信任证书

JKS文件是使用keytool生成的keystore文件,存放私钥和证书。但是我们用keytool的时候,私钥并没有单独生成出来。这个不利于我们后期的一些扩展工作。所以,我们需要把私钥从keytool中提取出来。

方案1:

使用OpenSSL工具来完成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();

}

}

如何将证书导入jdk的cacerts中

一、假设你的jdk 安装在C:/ Program Files / Java / jdk1.8.0_65 这个目录。 在上面的dos 界面上敲下面的命令:keytool -import -v -trustcacerts -alias maven -file d:/ MVAEN.cer -storepass changeit -keystore“C:/ProgramFiles/Java/jdk1.8.0_65/jre/lib/security/cacerts”

解释说明:

(1 ),maven 是可以自己修改的名称,d:/ MVAEN.cer 是导出的证书,同样,这里的证书名字也是随便取的,但前提是保证将C:\ ProgramFiles \ Java \ jdk1.8.0_65 \ JRE \ lib \ security中目录的cacerts的文件内之前没有导入同名证书,就是要保证你将要导入的证书名称唯一性。

(2 ),changeit 是密码,java 默认的。

(3 ),keytool 是jdk 中bin 目录的一个exe 文件,是jdk 默认自带的,在我电脑的目录是:C:\ Program Files \ Java \ jdk1.6.0_24 \ jre \ bin \ keytool.exe

(4 ),如果提示:“ 是否信任此证书?[ 否]:”  ,那么请输入“y” 。

当出现:“证书已添加到密钥库中[ 正在存储cacerts] ”的时候,那么恭喜你已经添加成功。

二,keytool 常用命令:// 查看的cacerts 中的证书列表:

keytool -list -keystore“C:/ProgramFiles/Java/jdk1.8.0_65/jre/lib/security/cacerts”-storepass changeit// 删除的cacerts 中指定名称的证书:

keytool -delete -alias maven-keystore“C:/ProgramFiles/Java/jdk1.8.0_65/jre/lib/security/cacerts”-storepass changeit

注意 :以上操作证书的操作,最好是进入到cacerts所在的目录再执行响应的命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值