如何创建X509自签名证书以在Apache Tomcat中使用

时间:2010-03-30 10:03:55

标签: java apache ssl openssl keytool

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

3 个答案:

答案 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格式的区别,那么这应该可以解决问题。