2014-12-09 1 views
1

Мне не удалось заставить плагин Apache CXF-клиента grails работать с двухсторонней аутентификацией SSL. Веб-сервис, который я вызываю, предоставляет URL-адрес среды разработки, который не требует двухсторонней аутентификации, и все работает нормально. Однако URL-адрес тестовой среды, который они предоставляют, требует двухсторонней аутентификации, и я не смог заставить ее работать.Двусторонняя (взаимная) аутентификация SSL с клиентским плагином Apache CXF для grails

Приложение Grails работает в Tomcat на сервере Windows.

Я написал автономное тестовое приложение Java для тестирования двухсторонней аутентификации. Я называю это подходящим хранилищем ключей, доверительным магазином и т. Д., И он отлично работает. (Это чисто Java-приложение - нет CXF.) Я импортировал этот же Java-класс в приложение grails, работающее на Tomcat, и это также работает. Однако, как было сказано ранее, при вызове с использованием CXF он не работает.

Я включил -Djavax.net.debug = ssl в Tomcat и может видеть, что клиент не отправляет сертификат, когда сервер отправляет сообщение CertificateRequest. (При использовании класса Java клиент отвечает правильным сертификатом.)

Я пробовал несколько различных способов настройки параметров хранилища ключей и доверия. Я в настоящее время установки их с помощью ++ JvmOptions, когда я начинаю Tomcat:

++JvmOptions 
-Xrs; 
-Djavax.net.debug=ssl; 
-Djavax.net.ssl.trustStore=C:\path\to\truststore.jks; 
-Djavax.net.ssl.keyStore=C:\path\to\keystore.jks; 
-Dhttps.cipherSuites=SSL_RSA_WITH_3DES_EDE_CBC_SHA; 
-Djavax.net.ssl.keyStorePassword=password; 
-Djavax.net.ssl.trustStorePassword=password 

я в настоящее время с помощью CXF-клиента: 2.0.3, хотя я также попытался с CxF-клиента: 1.5.6.

ответ

1

Я не знакомый с grails, но как выглядит ваш клиентский звонок cxf? Вы добавляете хранилище ключей/доверительное хранилище в http-канал?

пример:

<http:conduit name="https:..."> 
    <http:tlsClientParameters> 
     <sec:trustManagers> 
       <sec:keyStore type="JKS" password="password" file="..."/> 
      </sec:trustManagers> 
      <sec:keyManagers keyPassword="password"> 
       <sec:keyStore type="JKS" password="password" file="..."/> 
      </sec:keyManagers> 
     <sec:cipherSuitesFilter> 
     ... 
     </sec:cipherSuitesFilter> 
    </http:tlsClientParameters> 
    <http:client AutoRedirect="true" Connection="Keep-Alive"/> 
</http:conduit> 
+0

я не сделал, но я не думаю, что это возможно с помощью плагина Grails. Может ли кто-нибудь подтвердить это? Кроме того, я понимаю, что он должен наследовать эти настройки с Java. – ScottF

Смежные вопросы