Javakeytool有一个名为 的参数-keypass,除了用于整个密钥存储的密码之外,它还允许您设置一个(单独的)密码来保护您的私钥。
根据文档:
的值
-keypass是用于保护生成的密钥对的私钥的密码。如果未提供密码,则会提示用户输入密码。如果在提示时按 Return 键,则密钥密码将设置为与密钥库密码相同的密码。该-keypass值必须至少包含六个字符。
但是,当我在调用此命令时省略密码时,我似乎根本没有收到提示,至少在与-genkeypair生成 RSA 密钥对结合使用时没有提示。相反,我只获得一般帮助页面。如果我使用""强制输入“空”密码,那么它(正确地)告诉我密码应至少为 6 个字符。
有没有办法强制提示keytool输入特定于密钥的密码,而不必根据 的文档在命令行上提供它-genkeypair?
我已经针对 Java 11 LTS 对此进行了测试:
keytool -genkeypair -alias test1 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keystore test.pfx -storepass test1234
-keypass
Run Code Online (Sandbox Code Playgroud)
或者
keytool -genkeypair -alias test1 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keystore test.pfx -storepass test1234
-keypass ""
Run Code Online (Sandbox Code Playgroud)
两者似乎都不起作用;如您所见,我已经将-keypass参数移到了末尾,因此它无法将参数作为密码吞噬。
使用keytool或其他方法,有一种简单的方法可以将cacerts的所有内容导入jssecacerts文件吗?
基本上,我想定义自己的jssecacerts,但我希望jssecacerts也包含cacerts文件的所有可信条目.原因是我相信当jssecacerts文件存在时,cacerts文件内容将被忽略.
我有一个密钥库,其密钥对由以下命令生成:
keytool -genkeypair -v -alias test-agent -keypass test-agent -storepass 123456.ABC -keystore test-agent.keystore -storetype JKS
Run Code Online (Sandbox Code Playgroud)
我填写所请求的证书信息,并正确生成密钥对的商店.
以下命令:
keytool -list -keystore test-agent.keystore -storepass 123456.ABC -storetype JKS
Run Code Online (Sandbox Code Playgroud)
返回:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
test-agent, Jul 13, 2012, PrivateKeyEntry,
Certificate fingerprint (MD5): 7B:8F:D7:25:FF:34:D0:EF:44:87:46:E5:BF:18:C6:BF
Run Code Online (Sandbox Code Playgroud)
现在我将密钥库文件添加到我的构建路径并尝试使用在OSX Lion上运行的以下Java代码加载它:
public void loadKeyStore() {
try {
final Provider p = Security.getProvider("SUN");
final KeyStore keystore = KeyStore.getInstance("JKS",p);
final InputStream keyStoreInStream = this.getClass().getClassLoader().getResourceAsStream("test-agent.keystore");
if ( keyStoreInStream == null ) throw new RuntimeException("No keystore found!");
final …Run Code Online (Sandbox Code Playgroud) 我正在开发2个android应用程序,它们是我服务器的客户端.我无法在我的Android手机上安装这两个应用程序.我将第一个应用程序安装到手机上,一切正常.然后,当我尝试在手机上安装第二个应用程序时,我收到应用程序将替换另一个应用程序(第一个)的消息,然后我收到以下错误:
未安装应用程序:已安装具有相同冲突签名的现有包名称.
我提到我为每个应用程序创建了一个单独的密钥库文件,在android官方签名应用程序指南中导出它们,然后对它们进行zipaligned.
那么OS认为它是一个单一的应用程序?但实际上有2个不同的应用程序.我究竟做错了什么?
我想重命名应用程序签名密钥.但我怀疑是否会对密钥文件签名造成任何影响.在我的情况下,应用程序已经上传到play store.Thanks提前.
当我尝试将证书导入java密钥库时,我收到以下异常.
"java.security.cert.CertificateParsingException:无效的DER编码证书数据"
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fis);
java.security.cert.CertificateFactory cf = java.security.cert.CertificateFactory
.getInstance("X.509");
while (bis.available() > 0) {
Certificate cert = cf.generateCertificate(bis);
if (cert instanceof X509Certificate) {
certFx.addCertificate("vel", (X509Certificate) cert, true);
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激 !.
当使用FileInputStream在KeyStore中读取如下时,是否需要显式关闭input-steam以停止浪费系统资源?
FileInputStream fin = new FileInputStream("keystore.jks");
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(fin, password);
// Is this line needed ??
fin.close();
Run Code Online (Sandbox Code Playgroud)
此FileInputStream是由load()方法自动关闭还是需要显式手动干预?
我正在尝试使用命令行创建证书密钥库文件,但它给了我一个例外:
c:\Program Files\Java\jre7\bin>keytool.exe -genkey -alias srccodes -keyalg AES -
keystore C:\srccodes.jks -keysize 128
Enter keystore password:
Re-enter new password:
keytool error: java.lang.Exception: Cannot derive signature algorithm
Run Code Online (Sandbox Code Playgroud) 我当前正在从事的项目涉及密钥库和证书的管理。因此,我使用Java安全性API。使用证书的工作可以很好地退出,但是PKCS12-KeyStores的处理有些混乱:
我从Windows certmgr中导出了PKCS12-KeyStore,其中涉及一些公共证书(出于测试原因,CA证书)。安全API会打开相应的文件而不会出错,并且报告没有条目(为防止个人编程错误,我将通过使用使用相同安全API的Java keytool来显示该错误)。
#$ keytool -list -keystore keystore.pfx -storetype pkcs12
Enter Keystore-Password:
Keystore-Type: PKCS12
Keystore-Provider: SunJSSE
Keystore contains 0 Entries
Run Code Online (Sandbox Code Playgroud)
但是,KeyStore Explorer(不同的程序)会显示所有条目。
如果将私钥添加到KeyStore,则它们会被KeyTool识别。
我是否有普遍的误解,或者是什么情况?
预先感谢,托马斯
我有一个需要打开的key.ks文件.有人可以建议如何在Windows中打开此文件.我可以使用Keytool命令吗?