2013-12-18 124 views
2

我想通過在我的java腳本中調用keytool來創建一個自簽名證書。這裏是我的代碼的簡化版本,其中包括我有的問題:在Linux下使用Runtime.getRuntime()。exec()的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); 
} 

當我運行它時沒有錯誤。但它沒有給我鑰匙庫。我的問題是:

  1. 由密鑰工具生成的證書不被認爲是「子進程的輸出」,它需要被送入使用getinputstream()父進程,是嗎?

  2. 如果是這樣,我也試過getinputstream()東西在下面的討論後,

Keytool usage with Runtime.getRuntime().exec() under Linux

程序只是卡住,似乎永遠不會停止。

  1. 是否有任何其他方式使用java程序創建自簽名證書?

我是Java的新手,英語不是我的第一語言。我希望我明確表達了我的問題。

+0

我不確切知道你在嘗試什麼,但考慮改變你的策略略微:不是調用'exec'來調用keytool二進制文件,而是嘗試以編程方式自己調用Keystore創建代碼。 http://stackoverflow.com/questions/5312559/how-do-i-programmatically-create-a-new-keystore – Gus

+0

我想要的是以編程方式創建一個自簽名證書。我以爲我可以使用Runtime.getRuntime.exec()調用keytool,就像下面的文章中討論的那樣。[http://stackoverflow.com/questions/8308148/keytool-usage-with-runtime-getruntime-exec-under-linux ]我嘗試了他們的方法,但無法獲得證書。 @Hariprasad –

+0

@Gus證書籤名對於標準的Java加密API是不可能的。您需要使用第三方庫(例如BouncyCastle)來做到這一點。 – Jcs

回答

2

您可以再次嘗試不同的方法 - 因爲keytool是用Java編寫的並且隨JDK一起提供,所以您可以直接實例化keytool類,如this answer。這種方法可以讓您在您選擇的JKS文件中生成一個自簽名證書,但它不會讓您以編程方式訪問生成的證書。

請注意,在Java 7下,您將需要執行new sun.security.tools.KeyTool(),但在Java 8下,該類已被移動,您將需要執行new sun.security.tools.keytool.Main。當然,它只適用於Oracle JDK,這些API是內部的,不能保證在任何未來的Java版本等中存在,等等。

相關問題