2011-02-23 63 views
3


我有一個Bouncy城​​堡密鑰庫,我想用它來連接到SSLSocketFactory。 在「桌面」Java中執行此操作非常簡單,但您如何在android上執行此操作。Android:打開一個密鑰庫作爲一個資產,使SSLSocketFactory

不管你是放置資產還是res/raw,這個問題都沒有太大的區別 - 當試圖打開它並實例化一個KeyStore實例(在這種情況下是java.security.KeyStore)到SSLSocketFactorys構造函數。

以前有沒有人有過這方面的成功? 「閱讀」並打開它的最佳方式是什麼?任何指針或代碼片段將是最受歡迎的。

非常感謝

回答

2

這應該這樣做:

import android.content.Context; 
import org.apache.http.conn.ClientConnectionManager; 
import org.apache.http.conn.scheme.PlainSocketFactory; 
import org.apache.http.conn.scheme.Scheme; 
import org.apache.http.conn.scheme.SchemeRegistry; 
import org.apache.http.conn.ssl.SSLSocketFactory; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.impl.conn.SingleClientConnManager; 

import java.io.InputStream; 
import java.security.KeyStore; 

public class MyHttpClient extends DefaultHttpClient { 

    final Context context; 

    public MyHttpClient(Context context) { 
    this.context = context; 
    } 

    @Override protected ClientConnectionManager createClientConnectionManager() { 
    SchemeRegistry registry = new SchemeRegistry(); 
    registry.register(
     new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
    registry.register(new Scheme("https", newSslSocketFactory(), 443)); 
    return new SingleClientConnManager(getParams(), registry); 
    } 

    private SSLSocketFactory newSslSocketFactory() { 
    try { 
     KeyStore trusted = KeyStore.getInstance("BKS"); 
     InputStream in = context.getResources().openRawResource(R.raw.mystore); 
     try { 
     trusted.load(in, "ez24get".toCharArray()); 
     } finally { 
     in.close(); 
     } 
     return new SSLSocketFactory(trusted); 
    } catch (Exception e) { 
     throw new AssertionError(e); 
    } 
    } 
} 

ez24get將密鑰庫的密碼。

+0

另請參閱http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html – 2011-11-22 07:39:29

相關問題