Не удается подключиться к веб-службе в файле war на сервере с использованием Java и CXF
Я использую Tomcat 6 (встроенный сервер) в myEclipse 10.0 вместе с Apache CXF для приложения веб-служб. Моя проблема в том, что я пытаюсь подключиться к серверу, на котором есть файл war с некоторым служебным кодом. Тем не менее, когда я пытаюсь нажать его через код, я получаю эту ошибку от CXF:
ВНИМАНИЕ: Перехватчик выдал исключение, разматывая сейчас org.apache.cxf.interceptor.Fault: Не удалось отправить сообщение.
а затем эта ошибка, которая кажется основной проблемой:
Вызвано: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой при создании пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти действительный путь сертификации для запрошенной цели
Я использовал InstallCert.java, чтобы поразить сервер, и он дал мне это:
Загрузка KeyStore jssecacerts... Открытие соединения с:443... Запуск рукопожатия SSL...
Ошибок нет, сертификат уже доверенный
Я использовал Porticle для просмотра файла cacerts и, конечно же, информация о сервере sha1 и md5 точно соответствовала тому, что было на сервере. Файл cacerts находится в папке java/jre6/lib/security, которая, как я думал, автоматически загружается tomcat при загрузке.
Я также создал папку.bin в качестве другой идеи и поместил ее в каталог webapps для tomcat и изменил серверный XML следующим образом:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="<path on my machine>/webapps/tomcat.bin" keystorePass="changeit" />
Я нашел несколько статей, в которых показано, как загрузить сертификат в хранилище ключей, но это, похоже, не проблема, хотя это общее решение для этой ошибки. Есть что-то, что я пропускаю или может быть другая причина, почему я получаю эту ошибку?
1 ответ
Оказалось, что у myEclipse есть свой собственный jre, запускающий собственный файл cacerts по умолчанию. На моей машине это было здесь: C:\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\security.
Я использовал ProcessExplorer для просмотра процесса javaw.exe, а затем сделал Find (управляющая клавиша + клавиша F), и он показал дополнительную загруженную jre. Я скопировал правильные cacerts в этот каталог, перезапустил все, и это сработало!