如何使用Java密钥库工具自动化生成密钥库而无需用户交互?

112

我正在尝试使用Java keystore工具自动化生成密钥库。我正在使用的命令是:

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

但在执行此命令后,用户需要按照以下方式输入特定的输入:

Enter keystore password:  password
What is your first and last name?  
[Unknown]:  jetty.mortbay.org  
What is the name of your organizational unit?  
[Unknown]:  Jetty  
What is the name of your organization?  
[Unknown]:  Mort Bay Consulting Pty. Ltd.  
What is the name of your City or Locality?  
[Unknown]:  
What is the name of your State or Province?  
[Unknown]:  
What is the two-letter country code for this unit?  
[Unknown]:  
Is CN=jetty.mortbay.org, OU=Jetty, O=Mort Bay Consulting Pty. Ltd.,  
L=Unknown, ST=Unknown, C=Unknown correct?  
[no]:  yes  

Enter key password for <jetty>  
(RETURN if same as keystore password):  password  

用户无需输入这些值,是否有任何方式可以在命令中或通过脚本提供这些值而无需用户交互?

谢谢


为什么不从属性文件中读取这些信息呢? - Shamis Shukoor
有更多的命令行选项 - 阅读 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html(包括专有名称) - Jayan
7
仅仅因为使用了本地地址作为例子,并不意味着这个问题是局部的。我在英国,刚刚有了同样的问题。幸运的是,在问题被关闭之前有人已经回答了这个问题,这节省了我大量试图解决答案的时间。 - Trevor North
7
这个问题非常有用,答案帮了我很大的忙。不明白为什么它会被关闭。 - Jose Martinez
2
又是一例 SO 论坛过于着急封锁实际、相关而有用的问题,以此行使他们手头所持有微不足道的权力并突显自己的重要性。这是我在谷歌搜索该问题时得到的第一个结果,并帮助我解决了我的问题。令人难以置信的是,它被关闭的原因只是因为该问题涉及到询问者所在地区。 - Fam
3个回答

196

试试这个:

keytool -genkey -noprompt \
 -alias alias1 \
 -dname "CN=mqttserver.ibm.com, OU=ID, O=IBM, L=Hursley, S=Hants, C=GB" \
 -keystore keystore \
 -storepass password \
 -keypass password \
 -keyalg RSA

1
在将 .p12 格式的密钥库导入到 .jks 格式的密钥库中时,是否有一种指定源密钥库密码的方法? - Erik Kaplun
3
@ErikAllik keytool -importkeystore [...] -srcstorepass password_here 请在此处输入您的译文。 - Guillaume Boudreau
不要忘记使用"-keyalg"标志,否则脚本将失败。 - Nzall

18

不要忘记加上-noprompt参数,否则你将被要求输入“是”或“否”。


2
如果有人遇到了即使使用了该选项仍然出现提示的问题:有一些命令具有-srckeypass和-srcstorepass选项,您可能会轻易混淆它们。 - benez

6

查看命令行的完整文档,可以参考 这里 或者直接输入keytool命令。

具体来说,你可能想要查看选项-storepass password -keypass password


1
需要使用-dname关键字 - fredericrous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接