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:请帮我因此,格式化,这是一个烂摊子了......我想一个所见即所得的编辑器会真棒