【发布时间】:2010-03-30 10:03:55
【问题描述】:
我有一个使用第 3 方 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"
/>
我猜 keystore 需要是 Java Keystore 格式??但是我需要设备的证书是 x509 格式,所以我不知道该怎么做?
【问题讨论】:
标签: java apache ssl openssl keytool