如何使用groovy通过HTTPS SSL和SSO下载文件,而无需手动设置证书

时间:2016-02-09 22:41:21

标签: ssl groovy

我想通过连接使用单点登录(SSO)通过HTTPS(SSL)在groovy中下载文件,这是一种简单的方法。我并不打算建立一个完整的应用程序,因此安全性并不是一个问题。

def data =  new URL("https://server/context/servlet?param1=value1").getText()
print data

我目前使用curl进行下载,但理想情况下不必调用curl。目前使用的电话如下。

curl --negotiate -u user:pass -L --insecure -o filename.txt  "https://server/context/servlet?param1=value1" 

enter image description here

我正在寻找解决方案的两个关键点   - 它不涉及对卷曲进行系统调用   - 它不包括手动设置证书。

会考虑图书馆。

1 个答案:

答案 0 :(得分:1)

要避免进行SSL PKIX验证检查,请在 Groovy 中使用与在 Java 中相同的方式来实现X509TrustManager。 >

请注意,这会禁用验证服务器证书验证,因此存在安全风险:

import javax.net.ssl.*
    
// create a TrustManager to avoid PKIX path validation
def trustManager = [
  checkClientTrusted: { chain, authType ->  },
  checkServerTrusted: { chain, authType ->  },
  getAcceptedIssuers: { null }
] as X509TrustManager

// creat a sslCtx to use "lax" trustManager     
def context = SSLContext.getInstance("TLS")
context.init(null, [trustManager] as TrustManager[], null)
// set as default ssl context   
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory())

// finally you can connect to the server "insecurely"
def data =  new URL("https://server/context/servlet?param1=value1").getText()
print data

关于第二个问题,要提供与curl参数类似的--user身份验证,您可以使用Authenticator类为连接设置默认用户名/密码:

Authenticator.setDefault (new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication ("user", "pass".toCharArray())
    }
})

请注意,可以使用某些库在 Groovy 中以其他方式执行此操作,但这是使用标准 Java 类的可能方式。