2010-10-31 34 views
15

Có điều gì đó tương tự như thiết lập -D javax.net.debug=ssl tại dòng lệnh cho các ứng dụng máy tính để bàn Java, nhưng đối với Android? Tôi đã thử thiết lập nó trong mã thông qua System.setProperty("javax.net.debug", "ssl"); nhưng điều đó không hoạt động.Làm cách nào để bật gỡ lỗi SSL trên nền tảng Android?

Nếu không có cách nào để bật thuộc tính này, có ít nhất một cách khác để gỡ lỗi phía máy khách của kết nối SSL không?

CHỈNH SỬA: Chỉ cần làm rõ, điều này đề cập đến ổ cắm SSL thô (SSLSocket và SSLSocketFactory), không phải thư viện Apache hoặc bất kỳ thư viện mạng nào khác.

+0

Tôi cũng muốn biết điều đó, nhưng tôi không thể tìm thấy bất kỳ đầu mối nào về nó. : S – gnclmorais

Trả lời

1

Tại thời điểm này, chỉ có dường như không thể là một cách để làm điều này. Nhưng trong mọi trường hợp, chúng tôi sẽ sớm chuyển sang thư viện Netty có khả năng ghi nhật ký chi tiết hơn được xây dựng.

Vì vậy, giải pháp (không tuyệt vời) cho vấn đề này đơn giản là không sử dụng SSLSocket, nhưng để sử dụng mạng tốt hơn thay vào đó là thư viện.

+1

Nếu bất kỳ ai đến cùng đã thực sự tìm thấy một cách để cho phép gỡ lỗi bắt tay cho SSLSocket, vui lòng thêm câu trả lời của bạn và tôi sẽ chấp nhận câu trả lời của bạn thay thế. –

0

Nếu bạn đang sử dụng Apache HttpClient (bằng cách nhập tệp jar), bạn có thể bật ghi nhật ký bằng cách đặt biến môi trường trong Eclipse. Nếu bạn sử dụng Commons Logging, nhật ký sẽ được in ra Console. Tuy nhiên, điều này chỉ hoạt động nếu bạn đang chạy ứng dụng của mình trong trình mô phỏng chứ không phải trên thiết bị. Không chắc chắn về điều này sẽ giúp.

Xem http://hc.apache.org/httpcomponents-client-ga/logging.html

+0

Xin lỗi tôi nên rõ ràng hơn, tôi không sử dụng thư viện Apache, đây là ổ cắm SSL thô. Trên máy tính để bàn Java nó rất đơn giản để làm gỡ lỗi trên cái bắt tay SSL, nhưng trên Android nó có vẻ là không thể. –

1

bạn có thể viết một lớp TrustManager để xử lý nó. dụ:

ClientConnectionManager cm = new BasicClientConnectionManager(); 
cm.getSchemeRegistry().register(createHttpsScheme()); 
DefaultHttpClient client = new DefaultHttpClient(cm); 
String url = "https://your domain/your url"; 
HttpGet get = new HttpGet(url); 
HttpResponse resp = client.execute(get); 

etc.. 

public static Scheme createHttpsScheme() { 
     SSLContext context = SSLContext.getInstance("TLS"); 
     context.init(null, new TrustManager[] { 
       new TestTrustManager() 
     }, new SecureRandom()); 

     SSLSocketFactory sf = new SSLSocketFactory(context); 
     return new Scheme("https", 443, sf); 
} 

int TestTrustManager.java bạn có thể in các chuỗi như thế này:

public class TestTrustManager implements X509TrustManager { 
    @Override 
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { 

     for (int i = 0; i < chain.length; ++i) { 
     System.out.println(chain[i]); 
     } 

     decorated.checkServerTrusted(chain, authType); 
    } 
} 
0

Tôi đã tìm thấy một trợ gỡ lỗi hữu ích là để viết một wrapper xung quanh X509KeyManager và X509TrustManager rằng các đại biểu cuộc gọi đến triển khai ban đầu trong khi ghi nhật ký kết quả, ví dụ:

 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
     tmf.init(ks); 

     KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
     kmf.init(ks, null); 

     TrustManager[] tms = WrapTrustManager.WrapArray(tmf.getTrustManagers()); 
     KeyManager[] kms = WrapKeyManager.WrapArray(kmf.getKeyManagers()); 
     SSLContext context = SSLContext.getInstance("TLS"); 
     context.init(kms, tms, null); 

     ....setSocketFactory(context.getSocketFactory()); 

Việc triển khai WrapTrustManager và WrapKeyManager là đơn giản, nhưng hoang mang rằng họ sử dụng ngoại lệ để chỉ ra sự thất bại và vì vậy điều quan trọng là không nuốt ngoại lệ trong khi đăng nhập kết quả.

Lưu ý rằng giao diện sử dụng giao diện KeyManager và TrustManager trống và bạn cần tự động upcast cho X509KeyManager và X509TrustManager.

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