title: SSL Pinning Certificate
body: <pre><code> 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;
      }
  }
  </code></pre>
  
  <p>Ok this is how i do SSL Pinning in my Android application, and it all works perfect. So, What is the problem I have? I have cert.pem in my assets folder, what If I want to update my certificate? I will have to publish a new app on the store just for that. I dont want to do that, I want to know whats best way to handle such issue? Shall I download the certificate from somewhere and use it, or is there a way I can specify it via google play store and it can read it from there instead of assets folder? My goal is to avoid publishing new android app everytime i change the certificate.</p>