2016-04-11 28 views
0
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ピンニング証明書

答えて

1

証明書のピニングのポイントは、MITM(man-in-the-middle)攻撃を軽減することです。固定されていないソースから固定された証明書をダウンロードした場合、このダウンロードソースがMITMターゲットになるので、MITMを防止することは実際にはあまり効果的ではありません。

したがって、必要なピンナイズでアプリを発送してください。

オプションアップデートの問題を緩和する:

  1. あなたは、多くの場合、それを更新する必要はありませんので、自己生成したり、長い有効期間と証明書を購入。

  2. 購入したCAバックアップ証明書を使用している場合、証明書自体は固定せずに、数十年間有効なCAのルート証明書を固定してください。もちろん、これは、そのCAで署名されたドメインの証明書を持つMITMを有効にしますが、少なくとも1つだけに信頼する必要があるCAの数を減らしています。

+1

3番目のオプション(OWASP推奨)は、証明書ではなく使用済みサーバーの公開キー(subjectPublicKeyInfo)を固定することです。キーは通常、証明書が更新されたときに残ります。 – Robert

+0

SPKIを固定することに加えて、必要に応じて有効期限が切れた同じSPKIで更新された証明書を生成できるので、バックアップSKPIを固定することをお勧めします。 https://www.paypal-engineering.com/2015/10/14/key-pinning-in-mobile-applications/を参照してください。 – Dori