我有一个使用第三方JVM在Windows Mobile设备上运行的Java应用程序。应用程序通过HTTP与Apache Tomcat服务器通信。我们还使用HTTPS进行某些连接,并使用Sun keytool实用程序创建证书。首先使用genkey创建密钥库,然后使用export导出证书,最后使用import导入到另一个密钥库中。 genkey创建的文件被加载到Apache服务器中,使用import创建的密钥库被加载到PDA上的JVM中。一切都按预期工作。
我现在正在使用PDA上的新JVM和(无论出于何种原因)我已经确定此JVM要求密钥库采用X509(DER)格式。大约一个月前我开始研究这个问题,并且让它工作了,但是愚蠢地从未写下我采取的步骤,现在我不能为我的生活记住我的所作所为。我似乎记得使用openssl,但除此之外我完全迷失了。我现在使用openssl创建的任何东西并尝试加载到Apache会导致启动时出错(无效的密钥库格式),所以我可能完全错过了一些东西。
有没有人有任何想法如何创建这个可以加载到Apache服务器和运行在PDA上的JVM的自签名X509证书?
更新
我按照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格式,所以我不知道该怎么做呢?
答案 0 :(得分:1)
如果您已经关注instructions from apache,那么您需要提供有关无效密钥库格式的更多详细信息。
答案 1 :(得分:1)
not-yet-commons-ssl-0.3.11.jar中的KeyStoreBuilder实用程序可以在Apache / OpenSSL样式的PEM证书和Java密钥库文件之间进行转换:
http://juliusdavies.ca/commons-ssl/utilities.html#ksb
尝试运行此命令以查看命令行选项:
java -cp not-yet-commons-ssl-0.3.11.jar org.apache.commons.ssl.KeyStoreBuilder
答案 2 :(得分:1)
您写道PDA上的新JVM需要DER格式。您正在使用的openssl命令行将默认创建PEM文件。您可以使用以下openssl命令将这些server.crt和server.key PEM文件转换为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格式的区别,那么这应该可以解决问题。