【问题标题】:How to upgrade http protocol TLS1.2 in groovy application如何在groovy应用中升级http协议TLS1.2
【发布时间】:2019-09-07 13:44:31
【问题描述】:
我在 grails 2.5.0 应用程序上有 groovy,我想将 TLS1.2 设置为使用旧 TLS 版本。下面的代码我在 bootstrap.groovy 中设置但似乎它不起作用,任何帮助表示赞赏。
def init = { servletContext ->
System.setProperty("com.ibm.jsse2.overrideDefaultProtocol","TLSv12")
System.setProperty("https.protocols","TLSv1.2")
println "protocol in bootstrap = "+System.getProperty("https.protocols")
}
但在 println 语句中看不到任何内容。
【问题讨论】:
标签:
java
http
grails
groovy
tls1.2
【解决方案1】:
首先,并不是所有的 jvm 版本都支持 TLS 1.2 版。如果您使用的是 oracle jvm,如果在 java 1.6 上,它需要是 java 1.6.0.121 或更高版本,如果在 java 1.7 或任何更高版本的 jvm(即Java 8、Java 9 等)。
假设已经处理好了,需要设置系统属性:
System.properties['jdk.tls.client.protocols'] = 'TLSv1.2'
从阅读文档看来,https.protocols 设置也应该可以工作,但我从使用jdk.tls.client.protocols 配置大量服务器 jvm 中知道它可以工作。请注意,这是为了让服务器 jvm 在向 Internet 发出请求时使用 TLSv1.2,即当它们充当客户端时。所以我们在这里讨论的是配置请求的客户端。我假设服务器端需要进行不同的配置。
另外,在您的代码中,声明:
println "protocol in bootstrap = "+System.getProperty("https.protocols")
可能被解释为
println("protocol in bootstrap = ")+System.getProperty("https.protocols")
翻译成:
null+System.getProperty("https.protocols")
因为 println 返回 null。这将打印protocol in bootstrap =,但不会打印系统属性。
尝试显式括号:
println("protocol in bootstrap = "+System.getProperty("https.protocols"))