【发布时间】:2013-12-18 21:13:40
【问题描述】:
我想通过在我的 java 脚本中调用 keytool 创建一个自签名证书。这是我的代码的简化版本,其中包括我遇到的问题:
public class Tester {
public static void main(String[] args) {
String[] cmd = {
"/bin/sh",
"-c",
"keytool",
"-genkey",
"-dname",
"\"C=US,CN=CU,L=ABC,O=ABC_Univ,OU=ABC_Pro\"",
"-keysize",
"1024",
"-alias",
"testkeypairs",
"-keyalg",
"RSA",
"-sigalg",
"SHA1withRSA",
"-keystore",
"testkeystore",
"-storepass",
"abcdef",
"-keypass",
"abcdef"
}
Process testProc = Runtime.getRuntime().exec(cmd);
}
我运行它时没有错误。但它没有给我密钥库。我的问题是:
keytool 生成的证书不被视为需要使用
getinputstream()提供给父进程的“子进程的输出”,是吗?如果是这样,我还尝试了
getinputstream()的事情,如下文所述,
Keytool usage with Runtime.getRuntime().exec() under Linux
程序卡住了,似乎永远不会停止。
- 还有其他方法可以使用 java 程序创建自签名证书吗?
我是 Java 新手,英语不是我的第一语言。我希望我已经清楚地表达了我的问题。
【问题讨论】:
-
我不确切知道您在尝试什么,但请考虑稍微改变您的策略:与其调用
exec来调用 keytool 二进制文件,不如尝试以编程方式自己调用 Keystore 创建代码。 stackoverflow.com/questions/5312559/… -
我想要的是以编程方式创建一个自签名证书。我以为我可以使用 Runtime.getRuntime.exec() 调用 keytool,就像在下面的帖子中讨论的那样。[stackoverflow.com/questions/8308148/… 我尝试了他们的方法,但无法获得证书。 @Hariprasad
-
@Gus 证书签名不适用于标准 java 加密 API。您需要使用第 3 方库(例如 BouncyCastle)来执行此操作。
-
文件是否可能已创建,但位于与您预期不同的目录中?尝试为 -keystore 参数指定完整路径,看看会发生什么。
-
您可能需要调用 testProc.waitFor();并且还消耗 testProc.getInputStream();和 testProc.getErrorStream();类似 while(stream.read()!=-1) {};
标签: java runtime.exec keytool