我有一堆.keystore文件,需要找到一个具有特定CN和别名的文件。有办法做到这一点与keytool, jarsigner或其他工具?我找到了一种方法来检查特定的密钥存储库是否用于对特定的apk进行签名,但是我还需要获得每个文件中的别名和证书名称。
当前回答
您可以运行以下命令来列出您的密钥存储库文件的内容(以及别名):
keytool -v -list -keystore .keystore
如果你正在寻找一个特定的别名,你也可以在命令中指定它:
keytool -list -keystore .keystore -alias foo
如果没有找到别名,它将显示一个异常:
keytool错误:java.lang.Exception: Alias不存在
其他回答
您可以运行以下命令来列出您的密钥存储库文件的内容(以及别名):
keytool -v -list -keystore .keystore
如果你正在寻找一个特定的别名,你也可以在命令中指定它:
keytool -list -keystore .keystore -alias foo
如果没有找到别名,它将显示一个异常:
keytool错误:java.lang.Exception: Alias不存在
您可以从Java代码运行。
try {
File file = new File(keystore location);
InputStream is = new FileInputStream(file);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "password";
keystore.load(is, password.toCharArray());
Enumeration<String> enumeration = keystore.aliases();
while(enumeration.hasMoreElements()) {
String alias = enumeration.nextElement();
System.out.println("alias name: " + alias);
Certificate certificate = keystore.getCertificate(alias);
System.out.println(certificate.toString());
}
} catch (java.security.cert.CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(null != is)
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
证书类保存有关密钥存储库的所有信息。
更新—获取私钥
Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);
@prateek希望这就是你想要的!
keytool -v -list -cacerts -alias cert1
这适用于我,当我检查证书添加到jdk-11的别名,并检查它是否添加在windows机器上
也有控制台证书管理器编写为单文件shell脚本(开源):
https://dev.to/sfkulyk/writing-panel-manager-for-certificate-keystore-in-linux-shell-187b
可以浏览,复制,删除,重命名和比较密钥库。
这将列出所有证书:
keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
推荐文章
- 如何在java中格式化持续时间?(如格式H:MM:SS)
- urlencoder .encode(字符串)已弃用,我应该使用什么代替?
- javax.transaction.Transactional vs . org.springframework.transaction.annotation.Transactional
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 改变开关的“开”色
- 以编程方式将EditText的输入类型从PASSWORD更改为NORMAL,反之亦然
- 如何在隐藏和查看密码之间切换
- 在Android上调整一个大的位图文件到缩放输出文件
- 使用Enum实现单例(Java)
- 如何更改Android版本和代码版本号?
- Android Studio突然无法解析符号
- 应用程序重新启动而不是恢复
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?