この質問はHow can I pin a certificate with Square OKHTTP?と重複している可能性がありますが、わからないのでもう一度お尋ねします。 HTTPクライアントにSSL証明書を添付する必要があります。私は改造版を使用しています2.2.0
とokHttpバージョン3.6.0
okhttpでの証明書のピン割り当て
私は.crt
の形式で証明書を持っています。現在、私はas shown hereのピン留めをしています。しかし、私はそれが正しいかどうかわからない。 以下は、私のコード
static void pinCertificate(Context context, OkHttpClient.Builder builder) {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream cert = context.getResources().openRawResource(R.raw.certificate);
Certificate ca;
ca = cf.generateCertificate(cert);
// creating a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
builder.sslSocketFactory(sslContext.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
}
それはokHttpと.crt
証明書を固定する適切な方法はありますか?ハンドシェイクを適切に行っているかどうかをテストするにはどうすればよいですか? 誰かが証明書を正しく固定するためのサンプルコードを表示できますか? このようないくつかのサンプルとドキュメントを見ました。https://medium.com/@develodroid/android-ssl-pinning-using-okhttp-ca1239065616
しかし、それは私が実装したものとはまったく異なります。彼らはcrt
ファイルを使用していません。
誰かが証明書のピン割り当てとそれをokhttpでどのように行うことができるかについて、より良い説明を共有できれば、非常に役に立ちます。 ありがとうございます!
あなたのコードは、自己署名証明書をサポートするためのものです。認証局からの通常の証明書を証明書に固定したい場合は、リンク先の中規模の投稿は問題ありません。 – CommonsWare
'crt'ファイルは自己署名証明書を意味しますか? – Jrd
必ずしもそうではありません。自分のWebサイトを管理している人に、自己署名証明書であるかどうかを尋ねます。 – CommonsWare