如何在Groovy应用程序中升级HTTP协议TLS1.2

时间:2019-04-17 10:23:03

标签: java http grails groovy tls1.2

我在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语句中看不到任何内容。

1 个答案:

答案 0 :(得分:0)

首先,并非所有的jvm版本都支持TLS 1.2版。如果您使用的是oracle jvm,则在java 1.6上必须为java 1.6.0.121或更高版本,在java 1.7 上的任何更高版本的jvm(例如,java 1.7.95或更高版本) Java 8,Java 9等)。

假设已解决问题,则需要设置系统属性:

System.properties['jdk.tls.client.protocols'] = 'TLSv1.2'

从阅读文档看来,https.protocols设置也应该起作用,但是我知道使用jdk.tls.client.protocols配置大量服务器jvm可以起作用。请注意,这是为了使服务器jvm在向互联网发出请求时(即当它们充当客户端时)使用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"))