2012-07-24 68 views
17

根據docs,您可以手動完成從瀏覽器導出證書的相當笨重的過程,並在本地識別它。有沒有類似捲曲的--insecure開關來使這個實用?有沒有更簡單的方法告訴HTTPBuilder忽略無效的證書?

+1

您可以安裝自己的信任管理器和主機驗證跳過SSL證書檢查:http://stackoverflow.com/questions/3242335/how -to-use-ssl-with-a-self-signed-certificate-in-groovy – ataylor 2012-07-24 20:34:34

+0

這是在這裏報道 - > http://jira.codehaus.org/browse/GMOD-266但沒有迴應。 – Vigneshwaran 2012-11-30 06:58:09

+0

感謝您的鏈接 – 2013-02-06 22:42:24

回答

25

好消息大家! :-) 剛剛發現HttpBuilder的新版本(0.7.1)介紹方法:

​​

這解決了關於無效的SSL證書(當然你必須要知道,它也降低了安全性)的所有問題。有關此方法

的更多信息:https://github.com/jgritman/httpbuilder/wiki/SSL(在底部)

+1

不能更好:) – 2017-01-18 20:33:22

5

發現了一種非涉及證書的進口或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(.... 
+0

'新的SSLSocketFactory(sslContext,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)'沒有爲我工作,沒有找到構造函數。我必須這樣做:'def sf = new SSLSocketFactory(sslContext) sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)' – 2013-02-12 15:25:04

+0

如果您收到java.lang.VerifyError異常,請嘗試將代碼從您的控制器或服務移至常規或java類。我認爲Grails artificat與上面的一些代碼有衝突。 – 2013-02-19 11:18:56

+1

嗨法比亞諾,您提供的解決方案在GroovyConsole版本2.1.3(即最新版本)中無法編譯。請你讓我知道什麼是錯的/提供修復?將不勝感激。 – Ray 2013-07-19 16:15:55

相關問題