Настройка 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']],
    ...
]

Но это может быть и другое.

Другие вопросы по тегам