2012-07-24 8 views
17

Per il numero di serie docs, è possibile eseguire un processo piuttosto complesso di esportazione manuale di un certificato da un browser e ottenerlo riconosciuto localmente. C'è qualcosa di simile all'interruttore --insecure di curl per renderlo pratico?C'è un modo più semplice per dire a HTTPBuilder di ignorare un certificato non valido?

+1

È possibile installare il proprio fiducia manager e hostname verificatore di saltare i controlli SSL certificato: http://stackoverflow.com/questions/3242335/how -to-use-ssl-with-a-self-signed-certificate-in-groovy – ataylor

+0

È riportato qui -> http://jira.codehaus.org/browse/GMOD-266 ma non c'è ancora nessuna risposta. – Vigneshwaran

+0

Grazie per il collegamento –

risposta

25

Buone notizie a tutti! :-) appena scoperto che la nuova versione (0.7.1) del HttpBuilder introduce metodo:

ignoreSSLIssues() 

Questo risolve tutti i problemi per quanto riguarda i certificati SSL non validi (ovviamente bisogna essere consapevoli del fatto che essa diminuisce anche la sicurezza).

Maggiori informazioni su questo metodo: https://github.com/jgritman/httpbuilder/wiki/SSL (sezione in basso)

+1

Non potrebbe essere migliore :) –

5

trovato un modo che non implicano l'importazione dei certificati o httpbuilder hack

//== 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

'nuovo SSLSocketFactory (sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)' non ha funzionato per me, costruttore non trovato. Ho dovuto fare questo: 'sf sf = nuovo SSLSocketFactory (sslContext) sf.setHostnameVerifier (SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)' –

+0

Se ottieni un'eccezione java.lang.VerifyError prova a spostare il codice dal tuo controller o servizio a un groovy o classe java. Penso che i potenziatori di graates artificats siano in conflitto con alcuni dei codici precedenti. –

+1

Ehi Fabiano, la soluzione che hai dato non si compila in GroovyConsole Versione 2.1.3 (cioè una versione recente). Per favore fammi sapere cosa c'è di sbagliato/fornire una correzione? Sarebbe molto apprezzato – Ray