Android アプリで証明書のピン留めを行いたい。私はこれを理解するのに完全にイライラしています。私を助けてください
私が持っているもの:-
- .cert タイプの証明書ファイル。
- 秘密鍵が格納されている .key タイプの鍵ファイル。
この証明書が実装されるドメイン名がありません。私はIPアドレスしか持っていません。プロジェクトでokHttpとレトロフィットを使用しています。これを実装するためにスタックオーバーフローで多くの例を見てきました。
しかし、私はいくつかのものを得ていません:- 1. ドメイン名がない場合、ssl を IP アドレスに実装することは可能ですか? 2.ピンフィールドには何が含まれますか、私は秘密鍵を持っていません。秘密鍵 (sha256/XXXXXXXXXX) はどこにありますか?
Retrofit provideRetrofit(OkHttpClient okHttpClient, Gson gson) {
CertificatePinner certPinner = new CertificatePinner.Builder()
.add("patternField","pins")
.build();
OkHttpClient okHttpClientForPinning = new OkHttpClient.Builder()
.certificatePinner(certPinner)
.build();
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
try {
clientBuilder.sslSocketFactory(getSSLConfig(context).getSocketFactory());
}
catch (Exception e) {
e.printStackTrace();
}
clientBuilder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
boolean value = true;
//TODO:Some logic to verify your host and set value
return value;
}
});
return new Retrofit.Builder()
.baseUrl(backendUrl)
.client(okHttpClient)
.client(okHttpClientForPinning)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}