`

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

 
阅读更多

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();  
   }  
   }  

分享到:
评论

相关推荐

    Android签名文件jks和keystore相互装换.zip

    本教程将详细讲解如何在JKS和Keystore文件之间进行转换,以及如何在命令行中执行这些操作。 首先,我们需要理解JKS和Keystore的区别。JKS是Java密钥库,是Oracle Java平台的标准密钥存储格式。而Keystore是一个更...

    对密钥,密钥对,公钥,证书,私钥,jks,keystore,truststore,cer,pfx

    密钥、密钥对、公钥、证书、、私钥、jks、keystore、truststore、cer、pfx 等概念是信息安全领域中密钥管理和加密技术的重要组成部分。下面对这些概念进行详细的解释和说明: 1. 密钥:指的是公钥和私钥的统称。...

    java keystore导出.pfx .key .crt 私钥

    这会从`.pfx`文件中提取私钥到`mykey.key`。 在实际应用中,`www.cnsucc.com`可能是一个网站域名,这可能意味着你需要为该域名创建一个SSL/TLS证书。`keystore-export`可能是一个包含上述操作脚本或者导出结果的...

    导出JVM KeyStore中私钥的Java程序

    本文将详细讲解如何使用Java程序导出JVM KeyStore中的私钥,以及这个过程在配置SSL(Secure Sockets Layer)时的作用。 首先,我们需要了解Java KeyStore的基本概念。KeyStore是一个安全存储库,它包含了公钥、私钥...

    openssl 生成client.jks与server.jks文件的方法

    在 WS 安全性设计中,使用 OpenSSL 生成 client.jks 与 server.jks 文件是非常必要的。下面我们将详细介绍如何使用 OpenSSL 生成这两个文件。 Step 1: 创建证书颁发机构密钥 在使用 OpenSSL 生成证书之前,我们...

    jks文件到kdb格式

    - 从证书签发邮件中提取中级CA证书和服务器证书的内容,保存为cer文件。 2. 查看keystore文件内容: - 使用keytool命令列出keystore的内容,以获取PrivateKeyEntry的别名,这个别名在后续的证书导入中是必要的。...

    系统签名JKS生成工具.rar

    使用`keytool`,开发者可以生成一个新的密钥对,然后将公钥证书导入JKS文件,私钥则保留在密钥库中,用于签署APK。 生成JKS文件的基本步骤如下: 1. **创建JKS文件**:使用`keytool -genkeypair`命令生成一个新的...

    javakeytool支持的类型及如何将证书导入jks中.docx

    Keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中,缺省的密钥仓库实现将密钥仓库实现为一个文件,用口令来保护私钥。 Java KeyStore 的类型 Java KeyStore 有多种类型,常见的有 JKS、JCEKS、PKCS12...

    通过秘密键/证明书/CA证明书生成keystore文件

    4. **创建keystore**:将生成的私钥和证书(自签名或CA签名的)放入keystore文件中。`keytool`也可以用来完成这个步骤,指定keystore类型(如JKS或PKCS12),设置keystore密码,以及输入私钥和证书的相关信息。 5. ...

    nginx证书转换jks

    同样地,使用OpenSSL工具从PKCS12格式的证书库中提取私钥文件(server.key): ``` openssl pkcs12 -nocerts -nodes -in newkeystore.p12 -out server.key ``` 至此,我们已经成功地将JKS格式的证书文件转换为了Nginx...

    打包的keystore备份

    `apk_keystore.jks`就是这样的一个签名文件,它包含了用于签署APK的公钥和私钥。一旦创建,`keystore`文件应妥善保管,因为丢失或忘记密钥将无法更新应用,或者在某些情况下,可能无法再发布新版本。 2. **密钥对...

    SSL中各证书的转换

    `.cer`文件通常用于存储公钥证书,而`.jks`(Java Keystore)文件则是Java平台中用于存储密钥对和信任证书的标准格式。转换过程涉及使用`keytool`命令行工具,该工具是JDK的一部分。 #### 操作步骤 - 首先,确保...

    JavaKeyStone文件查看编辑

    Java KeyStone 文件查看编辑工具是专门针对Java安全领域中的JKS(Java Keystore)文件而设计的实用程序。JKS文件是Java平台用于存储证书、密钥对以及信任证书的容器,它在加密通信、SSL/TLS协议以及服务器身份验证等...

    Android 签名文件找回密码

    3:如果出现 Unsupported major.minor version 52.0 则表示该文件的版本与本地的jdk版本不匹配 经测试 jdk1.7.0使用1.05版本的AndroidKeystore jdk1.8.0使用1.07版本的AndroidKeystore (资源里面两个版本的都有) ...

    Tomcat更换SSL证书方法(jks与pfx转换)

    此文件通常包含私钥,是Windows系统中常见的证书格式。 #### PFX转JKS 使用JWSDP工具包中的`pkcs12import`工具将PFX文件转换为JKS格式。执行以下命令: ```bash C:\Sun\jwsdp-2.0\xws-security\bin\pkcs12import....

    portecle工具,jks转bks

    在Java开发中,密钥库是存储公钥、私钥、证书等安全信息的文件,而JKS(Java KeyStore)是Java平台默认使用的密钥库格式。然而,在Android平台上,出于兼容性和性能考虑,它更倾向于使用BKS(Bouncy Castle KeyStore...

    PKCS12与JKS格式转换器

    在相反的转换过程中,即从JKS转换为PKCS12,命令会略有不同: ```bash keytool -importkeystore -srckeystore mycert.jks -destkeystore mycert.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass ...

    Java安全_使用JavaAPI管理证书

    在Java中,KeyStore是存储密钥和证书的容器,它可以保存用户的私钥对、服务器的证书、证书链以及受信任的CA证书。KeyStore对象通过`java.security.KeyStore`类来表示,它支持多种类型的存储格式,如JKS(Java ...

    tomcat服务器证书安装配置指南

    其中,server 是私钥别名,生成的 keystore.jks 文件默认放在命令行当前路径下。 生成证书请求文件 (CSR) 使用 keytool 工具生成证书请求文件,命令如下: ``` keytool -certreq -alias server -sigalg MD5withRSA...

Global site tag (gtag.js) - Google Analytics