我想導入我自己的BKS文件,其中包含我的自簽名證書,但我遇到okHTTP的麻煩。我想用bks文件來做到這一點,我也通過sha512 /來實現它。正方形okHTTP證書鎖定 - sslSocketFactory錯誤
我已經從幾個教程得到了這段代碼,我知道那裏的問題是,但無法修復它。
import android.content.Context;
import android.util.Log;
import java.io.InputStream;
import java.security.KeyStore;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Pinning
{
Context context;
public static String TRUST_STORE_PASSWORD = "your_secret";
private static final String ENDPOINT = "https://api.yourdomain.com/";
public Pinning(Context c) {
this.context = c;
}
private SSLSocketFactory getPinnedCertSslSocketFactory(Context context) {
try {
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = context.getResources().openRawResource(R.raw.mytruststore);
trusted.load(in, "mypass".toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trusted);
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
return sslContext.getSocketFactory();
} catch (Exception e) {
Log.e("MyApp", e.getMessage(), e);
}
return null;
}
public void makeRequest() {
try {
OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context));
Request request = new Request.Builder()
.url(ENDPOINT)
.build();
Response response = client.newCall(request).execute();
Log.d("MyApp", response.body().string());
} catch (Exception e) {
Log.e("MyApp", e.getMessage(), e);
}
}
}
現在我得到下面的行內出現以下錯誤:
OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context)).;
錯誤:okHTTPClient
的SSLSocketFactory cannt應用於javax.net.SSLSocketFactory。
如果您查看導入內容,您會看到javax中的以下3項。
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
所以我錯了。似乎我需要一個okHTTP - sslSocketFactory與我的bks文件。但我無法找到一個工作的解釋。我也使用okHTTP 3.3.1
compile 'com.squareup.okhttp3:okhttp:3.3.1'
我發現,說明/解決方案在這裏:How can I pin a certificate with Square OKHTTP?。正如之前所提。我想使用bks文件,而不是sha512 /方法。
因此,我需要知道,如何將javax.ssl.Factory解析到okHTTP-sslFactory中,或者如何使用生成bks文件創建okHTTPsslFactory。
此外,okHTTP 3.1.1中不再提供setSSLSocketFactory方法。
我非常感謝您的幫助,並感謝您花時間來解決這個問題!
哦,男人謝謝你!我遲到了!我忘了添加.Builder()。對我感到羞恥:/ – user3325230