Как создать самоподписанный сертификат X509 для использования в Apache Tomcat

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

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

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

ОБНОВИТЬ

Я выполнил инструкции 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 Keystore ?? Но мне нужен сертификат в формате x509 для устройства, поэтому я не знаю, как это сделать?


person DaveJohnston    schedule 30.03.2010    source источник


Ответы (3)


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

person John    schedule 30.03.2010

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

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

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

java -cp еще не общие-ssl-0.3.11.jar org.apache.commons.ssl.KeyStoreBuilder

person Julius Musseau    schedule 31.03.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, это должно помочь.

person Jim Flood    schedule 31.03.2010