【问题标题】:How to create X509 self signed certificate for use in Apache Tomcat如何创建 X509 自签名证书以在 Apache Tomcat 中使用
【发布时间】: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


    【解决方案1】:

    如果您已经关注instructions from apache,则需要提供有关无效密钥库格式的更多详细信息。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        【解决方案3】:

        您写道,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 格式的区别,这应该可以解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-06
          • 1970-01-01
          • 2017-07-21
          • 2015-03-03
          • 2019-11-07
          • 2012-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多