2012-08-18 77 views
15

Tôi đang cố kết nối với máy chủ TLS dựa trên node.js từ ứng dụng Android của mình. Đương nhiên nó không thành công bởi vì tôi đang sử dụng một chứng chỉ tự ký.Kết nối TLS của Android và chứng chỉ tự ký

Có cách nào tôi chỉ có thể thêm chứng chỉ vào ứng dụng của mình và nhờ Android tin tưởng bằng cách nào đó không? Lưu ý, tôi không sử dụng HTTPS, đây là kết nối TLS qua kết nối TCP.

Trả lời

16

Sau nhiều lần đọc xung quanh, tôi đã đưa ra câu trả lời.

Hướng dẫn khá tốt là ở đây: http://nelenkov.blogspot.no/2011/12/using-custom-certificate-trust-store-on.html

Bây giờ, kể từ khi tôi không sử dụng HTTPS, tôi đã phải đưa ra một cách tiếp cận hơi khác nhau để có được một ổ cắm SSL sạch với keystore mới:

KeyStore store = KeyStore.getInstance("BKS"); 
InputStream truststore = mainActivity.getResources().openRawResource(R.raw.trust); 
store.load(truststore, "PASSWORD".toCharArray()); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
tmf.init(store); 
SSLContext context = SSLContext.getInstance("TLS"); 
context.init(null, tmf.getTrustManagers(), new SecureRandom()); 
Socket socket = context.getSocketFactory().createSocket(ip, port); 
7

Không nên thêm chứng chỉ vào ứng dụng của bạn. Bạn sẽ gặp sự cố khi cập nhật chứng chỉ.

Bạn đã nhìn:

Self-signed SSL acceptance on Android

HTTPS GET (SSL) with Android and self-signed server certificate
?

+0

Tôi nghĩ rằng việc mã hóa vân tay thành một ứng dụng là một ý tưởng hay. Cập nhật một ứng dụng để sử dụng một dấu vân tay mới không phải là khó khăn, và nó cắt giảm tất cả các crap liên quan đến CA. – CodesInChaos

+0

Xin lỗi, gần đây tôi đã rất bận. Tôi sẽ xem xét điều này tối nay trước khi tiền thưởng hết hạn :) –

+0

Tôi đã cung cấp cho bạn một +1 cho các liên kết. Tất nhiên, các phương pháp trong các liên kết đó làm cho ứng dụng tin tưởng MỌI NGƯỜI, mà chắc chắn không phải là những gì tôi đang tìm kiếm. Tuy nhiên, có thể thú vị cho những người trong môi trường thử nghiệm. :) –

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