Tomcat и SSL: неверный формат хранилища ключей - PullRequest
2 голосов
/ 17 февраля 2011

У меня возникает следующая проблема при запуске Tomcat 6:

[INFO] [talledLocalContainer] Caused by: java.io.IOException: Invalid keystore format
[INFO] [talledLocalContainer]   at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
[INFO] [talledLocalContainer]   at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
[INFO] [talledLocalContainer]   at java.security.KeyStore.load(KeyStore.java:1185)
[INFO] [talledLocalContainer]   at org.springframework.ws.soap.security.support.KeyStoreFactoryBean.afterPropertiesSet(KeyStoreFactoryBean.java:123)

Я настроил KeyStoreFactoryBean для загрузки хранилища ключей в моем classpath, который я сделал сам, используя Java 1.6.0_05.

Странная вещь, когда я запускаю тот же Tomcat, используя Eclipse, хранилище ключей загружается без каких-либо проблем. Если я запускаю Tomcat с помощью плагина Cargo Maven, я получаю это исключение. Если я устанавливаю приложение в только что загруженный Tomcat 6, я получаю исключение. И, к сожалению, я получаю то же исключение при развертывании приложения в наших средах Unix.

Единственными версиями jdk, которые я установил, являются 1.6.0_05 и 1.6.0_23, однако я пробовал обе версии, и это, похоже, не имеет значения. Я также попробовал это на другой машине только с 1.6.0_05, тоже не работал. У коллеги, который использует одно и то же хранилище ключей в своих приложениях, проблем нет, и его конфигурация Spring точно такая же (хотя и не думаю, что проблема лежит там).

При просмотре исходного кода JavaKeyStore ( исходный код ) вы можете увидеть, как он проверяет первые два целых числа, которые он читает из хранилища ключей, чтобы проверить его формат и выдать исключение. Я не могу представить, какая разница при запуске Tomcat с использованием Eclipse может привести к тому, что этот фрагмент кода будет выполняться иначе и не выбрасывать исключение.

Googling мне тоже не помог, многие люди, похоже, получают это исключение, но обычно потому, что они сделали хранилище ключей с более старой версией jdk.

Редактировать: поставщик "SUN версия 1.6" и тип JKS. Это одинаково для обоих случаев, работающих и не работающих.

1 Ответ

5 голосов
/ 18 февраля 2011

Решено: сборка maven отфильтровала сертификат (используя плагин ресурсов) и каким-то образом изменила хранилище ключей. Исключение хранилища ключей из плагина ресурсов решило это.

...