我正在使用 Google Cloud Endpoints 与我的 Android 应用的应用引擎后端进行交互。我想实现公钥/SSL 固定。对于 Android N 及更高版本,这样做很容易,但我想为早期版本的 Android 实现固定。似乎一种常见的方法是使用Trustkit。
Trustkit 链接上的入门说明,描述了如何通过设置 SSLSocketFactory 来进行设置,例如
// HttpsUrlConnection
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(TrustKit.getInstance().getSSLSocketFactory(serverHostname));
// OkHttp 2.x
OkHttpClient client =
new OkHttpClient()
.setSSLSocketFactory(TrustKit.getInstance().getSSLSocketFactory(serverHostname));
但是由于连接的设置方式,我不确定如何将其应用于 Google Cloud Endpoints,例如,这是在我的代码中为 Google Cloud Endpoints 设置的方式
import com.xxxx.backend.myApi.MyApi;
//I believe the MyApi class is generated automatically as part of the Google Cloud Endpoints integration in Android Studio.
class EndpointsAsyncTask extends AsyncTask<HashMap, Void, String> {
@Override
protected String doInBackground(HashMap... params) {
HashMap<String, String> dict = params[0];
String data = dict.get("dataString");
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
.setRootUrl("https://xxxxx").setApplicationName("xxxx");
myApiService = builder.build();
//This calls the API method
return myApiService.customApiMethodName(data).execute().getDict().toString();
}
}
我想知道的是如何在 Android 的早期版本(例如 API16-API23)中实现 SSL 固定,同时仍然以与我的应用程序相同的方式连接到 Google Cloud Endpoints,如上所示?
如果可能的话,我想使用 Trustkit,也许有一种不同的方式可以设置如何连接我的 Api 方法以便我可以使用它?如果这是不可能的,我可以使用 Trustkit 的替代品吗?或者只是一种完全不同的方式来实现 SSL 固定,同时仍然以这种方式使用 Google Cloud Endpoints?