Groovy 有没有更简单的方法告诉HTTPBuilder忽略无效的证书?

Groovy 有没有更简单的方法告诉HTTPBuilder忽略无效的证书?,groovy,httpbuilder,Groovy,Httpbuilder,根据,您可以通过一个相当繁琐的过程手动从浏览器导出证书并在本地识别它。有没有什么类似于curl的--不安全的开关的方法来实现这一点?找到了一种不涉及证书导入或httpbuilder黑客的方法 //== HTTPBUILDER IMPORTS @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' ) import groovyx.net.http.* im

根据,您可以通过一个相当繁琐的过程手动从浏览器导出证书并在本地识别它。有没有什么类似于curl的
--不安全的
开关的方法来实现这一点?

找到了一种不涉及证书导入或httpbuilder黑客的方法

//== HTTPBUILDER IMPORTS
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' )
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
//== END HTTPBUILDER IMPORTS

import javax.net.ssl.X509TrustManager
import javax.net.ssl.SSLContext
import java.security.cert.X509Certificate
import javax.net.ssl.TrustManager
import java.security.SecureRandom
import org.apache.http.conn.ssl.SSLSocketFactory
import org.apache.http.conn.scheme.Scheme
import org.apache.http.conn.scheme.SchemeRegistry

def http = new HTTPBuilder( "https://your_unsecure_certificate_host" )

    //=== SSL UNSECURE CERTIFICATE ===
   def sslContext = SSLContext.getInstance("SSL")              
   sslContext.init(null, [ new X509TrustManager() {public X509Certificate[]   
   getAcceptedIssuers() {null }
   public void checkClientTrusted(X509Certificate[] certs, String authType) { }
   public void checkServerTrusted(X509Certificate[] certs, String authType) { }
   } ] as TrustManager[], new SecureRandom())
   def sf = new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
   def httpsScheme = new Scheme("https", sf, 443)
   http.client.connectionManager.schemeRegistry.register( httpsScheme )
   //================================

//do your http call with the http object
http.request( ....
大家好消息!:-) 刚刚发现HttpBuilder的新版本(0.7.1)引入了以下方法:

ignoreSSLIssues()
这解决了所有关于无效SSL证书的问题(当然,您必须知道,这也会降低安全性)


有关此方法的更多信息:(底部部分)

您可以安装自己的信任管理器和主机名验证程序来跳过SSL证书检查:此处报告->但尚未响应。
新建SSLSocketFactory(sslContext,SSLSocketFactory.ALLOW_ALL_主机名验证程序)
对我不起作用,未找到构造函数。我必须这样做:
def sf=new SSLSocketFactory(sslContext)sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
如果出现java.lang.VerifyError异常,请尝试将代码从控制器或服务移动到groovy或java类。我认为grails工件增强器与上面的一些代码冲突。请告诉我出了什么问题/提供解决方案好吗?非常感谢。嗨,雷。示例缺少HttpBuilder导入。非常好:)