我在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语句中看到任何内容。
首先,并非所有jvm版本都支持TLS 1.2版。如果你使用的是oracle jvm,它需要是java 1.6.0.121或更高版本,如果在java 1.6,java 1.7.95或更高版本,如果在java 1.7或更高版本的jvm(即java 8,java 9等) 。
假设已经处理好了,您需要设置系统属性:
System.properties['jdk.tls.client.protocols'] = 'TLSv1.2'
通过阅读文档似乎https.protocols
设置也应该工作,但我知道从配置大量服务器jvms使用jdk.tls.client.protocols
它的工作原理。请注意,这是为了使服务器jvms在向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 =
但不打印系统属性。
尝试明确的parens:
println("protocol in bootstrap = "+System.getProperty("https.protocols"))