1

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

4

3 回答 3

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

于 2010-03-31T04:49:25.013 回答
1

如果您已经按照apache 的说明进行操作,则需要提供有关 Invalid Keystore Format 的更多详细信息。

于 2010-03-30T12:10:28.483 回答
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 格式的区别,那么这应该可以解决问题。

于 2010-03-31T22:40:38.910 回答