2014-07-18 28 views
0

我对配置和SSL连接,并使用Jsonrpc4j执行实例化一个JsonRpcHttpClient下面的代码:的Android的SSLContext受信任的证书上的API不工作8

public static void createJsonRpcClient(Context ctx) throws NoSuchAlgorithmException, KeyStoreException, CertificateException, FileNotFoundException, IOException, KeyManagementException { 
     if(instance==null) {   
      //http://stackoverflow.com/questions/7615645 
      Properties props=System.getProperties(); 
      props.put("jsse.enableSNIExtension", "false"); 
      //Configurando la conexion SSL 
      SSLContext sc=SSLContext.getInstance("TLS"); 
      KeyStore ks = KeyStore.getInstance("PKCS12"); 
      AssetManager manager=ctx.getAssets(); 
      ks.load(manager.open("www.example.com.p12"), 
         "Password".toCharArray()); 
      TrustManagerFactory tf = TrustManagerFactory 
        .getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
      tf.init(ks); 
      sc.init(null, tf.getTrustManagers(), null); 
      //Configurando la autenticacion HTTP 
      Authenticator auth=new Authenticator() { 
       @Override 
       protected PasswordAuthentication getPasswordAuthentication() {     
        return new PasswordAuthentication("user", 
          "pass".toCharArray()); 
       } 
      }; 
      Authenticator.setDefault(auth); 
      instance=new JsonRpcHttpClient(new URL("https://www.example.com/" + 
        "dbconnector/index.php")); 
      instance.setSslContext(sc); 
     }  
    } 

    /** 
    * 
    * @return La instancia del cliente JSON-RPC 
    */ 
    public static JsonRpcHttpClient getJsonRpcClient() {   
     return instance; 
    } 

这段代码的格式是非常可怕的,我不知道为什么...不管怎样,这段代码在Android 4.2上工作得很完美,以下JSON-RPC请求正常工作

然而,在Android 2.2上,即使代码在我试图执行JSON- RPC请求引发此异常:

07-18 16:00:06.433: W/System.err(391): Expetion: Not trusted server certificate 
07-18 16:00:06.493: W/System.err(391): javax.net.ssl.SSLException: Not trusted server certificate 
07-18 16:00:06.493: W/System.err(391): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371) 
07-18 16:00:06.623: W/System.err(391): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.getSecureSocket(HttpConnection.java:168) 
07-18 16:00:06.643: W/System.err(391): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:399) 
07-18 16:00:06.653: W/System.err(391): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:147) 
07-18 16:00:06.773: W/System.err(391): at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:145) 
07-18 16:00:06.832: W/System.err(391): at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:105) 
07-18 16:00:06.832: W/System.err(391): at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:123) 
07-18 16:00:06.842: W/System.err(391): at com.example.app.JsonRpcTask.doInBackground(JsonRpcTask.java:40) 

最后一行提到的JsonRpcTask是一个AsyncTask,它检索先前实例化的JsonRpcHttpClient并发送传递给它的JSON-RPC调用。

由于它不是NullPointerException这意味着该实例已正确启动,但似乎由于某种原因而忽略了可信证书。

PD:请帮我因此,格式化,这是一个烂摊子了......我想一个所见即所得的编辑器会真棒

回答

0

好吧,我发现这个问题是用的TrustManager,解决相关被描述为here

相关问题