2010-03-30 115 views
1

我有一個Java應用程序,該應用程序使用第三方JVM在Windows Mobile設備上運行。該應用程序通過HTTP與Apache Tomcat服務器進行通信。我們還使用HTTPS進行了一些連接,並使用Sun keytool實用程序創建了證書。首先使用genkey創建密鑰庫,然後使用導出導出證書,最後使用導入將其導入到另一個密鑰庫。由genkey創建的文件被加載到Apache服務器中,並且使用導入創建的密鑰庫被加載到PDA上的JVM中。一切都按預期工作。如何創建用於Apache Tomcat的X509自簽名證書

我現在正在使用PDA上的新JVM以及(無論什麼原因),我已經確定此JVM要求密鑰存儲區採用X509(DER)格式。大約一個月前我開始研究這個問題,並且讓它工作,但是愚蠢地從未寫下我採取的步驟,現在我不能記住我做了什麼。我似乎記得使用openssl,但除此之外我完全迷失了。我現在使用openssl創建的任何東西,並嘗試加載到Apache導致啓動時出現錯誤(無效的密鑰存儲格式),所以我可能完全丟失了一些東西。

有沒有人有任何想法,我應該如何創建這個自簽名的X509證書,可以加載到Apache服務器和運行在PDA上的JVM?

UPDATE

我也跟着上創建自簽名證書從Apache指令:

openssl req -new -x509 -nodes -out server.crt -keyout server.key 

但是,當我的密鑰複製到Apache的conf目錄並啓動起來,我得到一個異常:

java.io.IOException: invalid keystore format 
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633) 
... 

server.xml文件包含HTTPS以下項:

<Connector port="6969" 
     protocol="HTTP/1.1" 
      SSLEnabled="true" 
       maxThreads="150" 

       scheme="https" 
       sslProtocol="TLS" 
       secure="true" 

       clientAuth="false" 

       keystoreFile="./conf/server.key" 
       keystorePass="password" 

     ciphers="SSL_RSA_WITH_RC4_128_MD5" 
    /> 

我猜密鑰庫需要是Java密鑰庫格式?但我需要證書爲設備的x509格式,所以我不知道如何去做這件事?

回答

1

的KeyStoreBuilder效用還未公共-SSL-0.3.11.jar可以在Apache/OpenSSL的風格PEM證書和Java密鑰庫文件之間的轉換:

http://juliusdavies.ca/commons-ssl/utilities.html#ksb

嘗試運行此看命令行選項:

java命令還未公共-SSL-0.3.11.jar org.apache.commons.ssl.KeyStoreBuilder

1

你寫的是PDA上的新的JVM需要DER格式。您正在使用的openssl命令行將默認創建PEM文件。您可以將那些server.crt這和server.key PEM文件使用這些OpenSSL的命令DER格式:

$ openssl x509 -in server.crt -outform DER -out server.crt2 
$ openssl rsa -in server.key -outform DER -out server.key2 

PEM文件將是可讀的文本文件,並DER文件將二進制文件。如果它實際上只是PEM和DER格式的差異,那麼這應該是個訣竅。