我想通过连接使用单点登录(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"
我正在寻找解决方案的两个关键点 - 它不涉及对卷曲进行系统调用 - 它不包括手动设置证书。
会考虑图书馆。
答案 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 类的可能方式。