我有一个使用 3rd Party 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 格式,所以我不知道该怎么做?