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