簡體   English   中英

SSL固定證書

[英]SSL Pinning Certificate

 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;
    }
}

好的,這就是我在Android應用程序中進行SSL固定的方式,並且一切正常。 那么,我有什么問題? 我的資產文件夾中有cert.pem,如果要更新證書怎么辦? 為此,我將不得不在商店上發布一個新的應用程序。 我不想這樣做,我想知道什么是處理此類問題的最佳方法? 我應該從某個地方下載證書並使用它,還是可以通過Google Play商店指定證書,並且可以從那里而不是資產文件夾中讀取證書? 我的目標是避免每次更改證書時都發布新的android應用。

證書固定的目的是減輕中間人(MITM)攻擊。 如果您從非固定來源下載固定證書,那么阻止MITM的狀況就不會更好,因為此下載源已成為MITM目標。

因此,只需將您想要的圖釘發送給您的應用即可。

緩解更新問題的選項:

  1. 自行生成或購買具有較長有效期的證書,因此您不必經常進行更新。

  2. 如果您使用的是購買的CA支持的證書,請不要固定證書本身,而要固定幾十年的CA根證書。 當然,這使MITM可以使用與該CA簽署的域證書來啟用MITM,但是至少您將需要信任的CA數量減少到一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM