Как создать самозаверяющий сертификат X509 для использования в Apache Tomcat - PullRequest
1 голос
/ 30 марта 2010

У меня есть приложение Java, которое работает на устройствах Windows Mobile с использованием сторонней JVM. Приложение связывается с сервером Apache Tomcat по HTTP. Мы также использовали HTTPS для некоторых соединений, и сертификаты были созданы с помощью утилиты Sun keytool. Сначала было создано хранилище ключей с помощью genkey, затем сертификат экспортирован с использованием экспорта и, наконец, он был импортирован в другое хранилище ключей с помощью импорта. Файл, созданный genkey, был загружен на сервер Apache, а хранилище ключей, созданное с помощью импорта, было загружено в JVM на КПК. Все работает как положено.

Сейчас я работаю с новой JVM на КПК и (по любой причине) я установил, что для этой JVM требуется, чтобы хранилище ключей было в формате X509 (DER). Я начал работать над этим около месяца назад, и он работал, но тупо никогда не записывал шаги, которые я предпринял, и теперь я не могу на всю жизнь вспомнить, что я делал. Кажется, я помню, что использовал openssl, но в остальном я полностью потерян. Все, что я создаю сейчас, используя openssl и пытаюсь загрузить в Apache, приводит к ошибке при запуске (Неверный формат хранилища ключей), поэтому я, вероятно, что-то упускаю полностью.

У кого-нибудь есть идеи, как мне поступить, создавая самозаверяющий сертификат X509, который можно загрузить на сервер Apache и JVM, работающую на КПК?

UPDATE

Я следовал инструкциям 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 ]

1 голос
/ 31 марта 2010

Утилита KeyStoreBuilder в not-Пока-commons-ssl-0.3.11.jar может конвертировать между сертификатами PEM в стиле Apache / OpenSSL и файлами хранилища ключей Java:

http://juliusdavies.ca/commons-ssl/utilities.html#ksb

Попробуйте запустить это, чтобы увидеть параметр командной строки:

java -cp not-Пока-commons-ssl-0.3.11.jar org.apache.commons.ssl.KeyStoreBuilder

1 голос
/ 01 апреля 2010

Вы пишете, что для новой JVM на КПК требуется формат DER. Используемая вами командная строка openssl создаст PEM-файлы по умолчанию. Вы можете преобразовать эти PEM-файлы server.crt и server.key в формат DER, используя следующие команды openssl:

$ openssl x509 -in server.crt -outform DER -out server.crt2
$ openssl rsa -in server.key -outform DER -out server.key2

Файлы PEM будут читаться как текстовые файлы, а файлы DER будут двоичными. Если это действительно разница между форматами PEM и DER, это должно сработать.

1 голос
/ 30 марта 2010

Если вы уже следуете инструкциям от apache , вам необходимо предоставить более подробную информацию о неверном формате хранилища ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...