public static SSLContext getSSL() {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
AssetManager assetManager = App.getAppContext()
.getAssets();
InputStream caInput = assetManager.open("cert.pem");
java.security.cert.X509Certificate ca = null;
try {
ca = (java.security.cert.X509Certificate) cf
.generateCertificate(caInput);
} catch (Exception er) {
} finally {
caInput.close();
}
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 context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
return context;
} catch (Exception e1) {
return null;
}
}
[OK]これは私のAndroidアプリケーションでSSLピンニングを行う方法であり、すべて正常に動作します。それで、私の問題は何ですか?私は自分の資産フォルダにcert.pemを持っていますが、私は自分の証明書を更新したいのですが?私はそれのためだけに店に新しいアプリを公開する必要があります。私はそれをしたくない、私はそのような問題を処理するための最善の方法を知りたいですか?どこからでも証明書をダウンロードして使用するか、Google Playストアで指定できる方法はありますか?アセットフォルダではなくそこから読み取ることができますか?私の目標は、証明書を変更するたびに新しいアンドロイドアプリを公開することを避けることです。SSLピンニング証明書
3番目のオプション(OWASP推奨)は、証明書ではなく使用済みサーバーの公開キー(subjectPublicKeyInfo)を固定することです。キーは通常、証明書が更新されたときに残ります。 – Robert
SPKIを固定することに加えて、必要に応じて有効期限が切れた同じSPKIで更新された証明書を生成できるので、バックアップSKPIを固定することをお勧めします。 https://www.paypal-engineering.com/2015/10/14/key-pinning-in-mobile-applications/を参照してください。 – Dori