Настройка Java System.Property (для включения TLS1.1) для старого сайта Grails (Grails 2.3)
У нас есть довольно древний сайт Грааля (2.3), который уже давно служит нашим потребностям. Сервер должен обратиться к другой службе для получения сведений о клиенте, и для этой службы скоро потребуется только TLS 1.1 или выше. Наш сайт работает на Java 1.7, который должен поддерживать TLS 1.1 и 1.2, но требует, чтобы он был включен явно. У меня проблемы с включением его на сайте Grails.
Прежде всего я попытался запустить Grails, запустив
grails -Dhttps.protocols=TLSv1.1 run-app
на основании инструкций здесь и подсказки здесь. Но когда я это делаю, сокет все еще закрывается, когда я пытаюсь войти на другой сайт:
Message: Connection reset
Line | Method
->> 196 | read in java.net.SocketInputStream
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 122 | read in ''
| 82 | flushBuffer . . . . . . in java.io.BufferedOutputStream
| 140 | flush in ''
| 191 | flush . . . . . . . . . in org.apache.commons.httpclient.ChunkedOutputStream
| 99 | flush in com.ctc.wstx.io.UTF8Writer
| 214 | flush . . . . . . . . . in com.ctc.wstx.sw.BufferingXmlWriter
| 311 | flush in com.ctc.wstx.sw.BaseStreamWriter
| 50 | flush . . . . . . . . . in org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper
| 230 | flush in org.apache.axiom.om.impl.MTOMXMLStreamWriter
| 91 | serialize . . . . . . . in org.apache.axis2.databinding.ADBDataSource
| 638 | internalSerialize in org.apache.axiom.om.impl.llom.OMSourcedElementImpl
| 563 | serializeChildren . . . in org.apache.axiom.om.impl.util.OMSerializerUtil
| 846 | internalSerialize in org.apache.axiom.om.impl.llom.OMElementImpl
| 267 | serializeInternally . . in org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl
| 229 | internalSerialize in ''
| 188 | serializeAndConsume . . in org.apache.axiom.om.impl.llom.OMSerializableImpl
| 74 | writeTo in org.apache.axis2.transport.http.SOAPMessageFormatter
| 84 | writeRequest . . . . . in org.apache.axis2.transport.http.AxisRequestEntity
| 499 | writeRequestBody in org.apache.commons.httpclient.methods.EntityEnclosingMethod
| 2114 | writeRequest . . . . . in org.apache.commons.httpclient.HttpMethodBase
| 1096 | execute in ''
| 398 | executeWithRetry . . . in org.apache.commons.httpclient.HttpMethodDirector
| 171 | executeMethod in ''
| 397 | executeMethod . . . . . in org.apache.commons.httpclient.HttpClient
| 621 | executeMethod in org.apache.axis2.transport.http.AbstractHTTPSender
| 193 | sendViaPost . . . . . . in org.apache.axis2.transport.http.HTTPSender
| 75 | send in ''
| 404 | writeMessageWithCommons in org.apache.axis2.transport.http.CommonsHTTPTransportSender
| 231 | invoke in ''
| 443 | send . . . . . . . . . in org.apache.axis2.engine.AxisEngine
| 406 | send in org.apache.axis2.description.OutInAxisOperationClient
| 229 | executeImpl . . . . . . in ''
| 165 | execute in org.apache.axis2.client.OperationClient
| 3916 | login . . . . . . . . . in com.zuora.api.ZuoraServiceStub
| 51 | ___init___ in com.zuora.zortal.util.ZApi$$EPbnSoym
| 48 | <init> . . . . . . . . in com.zuora.zortal.repository.ZuoraRepository
| 40 | login in saaseiportal.unauthorized.LoginController
| 195 | doFilter . . . . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1145 | runWorker . . . . . . . in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . . . . . . . . in java.lang.Thread
Я подтвердил, что моя система и система Java поддерживают TLS 1.1. Я создал пример клиента Java для подключения непосредственно к сайту. Когда я запускаю его регулярно, он получает аналогичное сообщение о сбросе соединения, но при попытке получить правильный ответ
java -Dhttps.protocols=TLSv1.1 SampleHttpTest
Я подозреваю, что где-то в Grails действительно очищает мои настройки. Непосредственно перед вызовом входа в систему, который генерирует исключение, я добавил вызов регистрации в
System.out.println(System.getProperty("https.protocols"));
И это просто записывает ноль. Установка этого свойства непосредственно перед тем, как я попытаюсь войти, не имеет никакого эффекта, возможно, потому что это слишком поздно в жизни приложения (какая-то фабрика уже создана или что-то в этом роде).
На самом деле я новичок в Grails, так что обновление приложения до Grails 2.5 и Java 8 на самом деле довольно пугающая перспектива. Я надеюсь, что кто-то может указать на что-то простое, как:
"Здесь Grails позволяет вам устанавливать системные свойства перед запуском любого другого Java-кода" или "Здесь Grails устанавливает кучу настроек по умолчанию, и вы должны уже проверить значения там" или "Возможно, это плагин аутентификации (или что-то), который должен очистить / поиграть с этими настройками
Заранее благодарю за любую помощь!!
1 ответ
Это может быть режим вилки. Чтобы передать аргумент JVM разветвленной Java, вы должны изменить BuildConfig.groovy
немного:
grails.project.fork = [
...
run : [maxMemory: 1280, minMemory: 128, debug: false, maxPerm: 256, forkReserve: true, jvmArgs: ['-Dhttps.protocols=TLSv1.1']],
...
]
Но это может быть и другое.