2012-07-24 35 views
17

Theo số docs, bạn có thể thực hiện quá trình khá phức tạp khi xuất chứng chỉ từ trình duyệt theo cách thủ công và nhận được chứng nhận cục bộ. Có bất cứ điều gì tương tự như curl của --insecure chuyển đổi để thực hiện điều này thực tế?Có cách nào dễ dàng hơn để yêu cầu HTTPBuilder bỏ qua một chứng chỉ không hợp lệ không?

+1

Bạn có thể cài đặt riêng bạn quản lý tin tưởng và hostname xác minh để bỏ qua kiểm tra giấy chứng nhận SSL: http://stackoverflow.com/questions/3242335/how -to-use-ssl-with-a-self-signed-certificate-in-groovy – ataylor

+0

Nó được báo cáo ở đây -> http://jira.codehaus.org/browse/GMOD-266 nhưng chưa có phản hồi nào. – Vigneshwaran

+0

Cảm ơn bạn đã liên kết –

Trả lời

25

tin tức tất cả mọi người tốt! :-) Chỉ cần phát hiện ra rằng phiên bản mới (0.7.1) của HttpBuilder giới thiệu phương pháp:

ignoreSSLIssues() 

này giải quyết tất cả các vấn đề liên quan đến giấy chứng nhận SSL không hợp lệ (tất nhiên bạn phải biết rằng nó cũng làm giảm an ninh).

biết thêm thông tin về phương pháp này: https://github.com/jgritman/httpbuilder/wiki/SSL (phần ở phía dưới)

+1

Không thể tốt hơn :) –

5

Tìm thấy một cách mà không liên quan đến việc nhập khẩu giấy chứng nhận hoặc httpbuilder hacks

//== 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 mới (sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)' không hoạt động đối với tôi, không tìm thấy hàm tạo. Tôi đã phải làm điều này: 'def sf = new SSLSocketFactory (sslContext) sf.setHostnameVerifier (SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)' –

+0

Nếu bạn nhận được một ngoại lệ java.lang.VerifyError cố gắng di chuyển mã từ bộ điều khiển hoặc dịch vụ của bạn đến một groovy hoặc lớp java. Tôi nghĩ rằng grails artificats enhancer xung đột với một số mã trên. –

+1

Hey Fabiano, giải pháp bạn đã cung cấp không biên dịch trong phiên bản GroovyConsole 2.1.3 (tức là một phiên bản gần đây). Bạn vui lòng cho tôi biết những gì là sai/cung cấp một sửa chữa? Sẽ được nhiều đánh giá cao. – Ray

Các vấn đề liên quan