Repositorio del curso CCOM4030 el semestre B91 del proyecto Artesanías con el Instituto de Cultura

CordovaServerTrust.java 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package com.silkimen.cordovahttp;
  2. import java.io.IOException;
  3. import java.security.GeneralSecurityException;
  4. import java.security.KeyStore;
  5. import java.security.cert.CertificateFactory;
  6. import java.security.cert.X509Certificate;
  7. import com.silkimen.http.TLSConfiguration;
  8. import org.apache.cordova.CallbackContext;
  9. import android.app.Activity;
  10. import android.util.Log;
  11. import android.content.res.AssetManager;
  12. import javax.net.ssl.HostnameVerifier;
  13. import javax.net.ssl.SSLSession;
  14. import javax.net.ssl.TrustManager;
  15. import javax.net.ssl.TrustManagerFactory;
  16. import javax.net.ssl.X509TrustManager;
  17. class CordovaServerTrust implements Runnable {
  18. private static final String TAG = "Cordova-Plugin-HTTP";
  19. private final TrustManager[] noOpTrustManagers;
  20. private final HostnameVerifier noOpVerifier;
  21. private String mode;
  22. private Activity activity;
  23. private TLSConfiguration tlsConfiguration;
  24. private CallbackContext callbackContext;
  25. public CordovaServerTrust(final String mode, final Activity activity, final TLSConfiguration configContainer,
  26. final CallbackContext callbackContext) {
  27. this.mode = mode;
  28. this.activity = activity;
  29. this.tlsConfiguration = configContainer;
  30. this.callbackContext = callbackContext;
  31. this.noOpTrustManagers = new TrustManager[] { new X509TrustManager() {
  32. public X509Certificate[] getAcceptedIssuers() {
  33. return new X509Certificate[0];
  34. }
  35. public void checkClientTrusted(X509Certificate[] chain, String authType) {
  36. // intentionally left blank
  37. }
  38. public void checkServerTrusted(X509Certificate[] chain, String authType) {
  39. // intentionally left blank
  40. }
  41. } };
  42. this.noOpVerifier = new HostnameVerifier() {
  43. public boolean verify(String hostname, SSLSession session) {
  44. return true;
  45. }
  46. };
  47. }
  48. @Override
  49. public void run() {
  50. try {
  51. if ("legacy".equals(this.mode)) {
  52. this.tlsConfiguration.setHostnameVerifier(null);
  53. this.tlsConfiguration.setTrustManagers(null);
  54. } else if ("nocheck".equals(this.mode)) {
  55. this.tlsConfiguration.setHostnameVerifier(this.noOpVerifier);
  56. this.tlsConfiguration.setTrustManagers(this.noOpTrustManagers);
  57. } else if ("pinned".equals(this.mode)) {
  58. this.tlsConfiguration.setHostnameVerifier(null);
  59. this.tlsConfiguration.setTrustManagers(this.getTrustManagers(this.getCertsFromBundle("www/certificates")));
  60. } else {
  61. this.tlsConfiguration.setHostnameVerifier(null);
  62. this.tlsConfiguration.setTrustManagers(this.getTrustManagers(this.getCertsFromKeyStore("AndroidCAStore")));
  63. }
  64. callbackContext.success();
  65. } catch (Exception e) {
  66. Log.e(TAG, "An error occured while configuring SSL cert mode", e);
  67. callbackContext.error("An error occured while configuring SSL cert mode");
  68. }
  69. }
  70. private TrustManager[] getTrustManagers(KeyStore store) throws GeneralSecurityException {
  71. String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
  72. TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
  73. tmf.init(store);
  74. return tmf.getTrustManagers();
  75. }
  76. private KeyStore getCertsFromBundle(String path) throws GeneralSecurityException, IOException {
  77. AssetManager assetManager = this.activity.getAssets();
  78. String[] files = assetManager.list(path);
  79. CertificateFactory cf = CertificateFactory.getInstance("X.509");
  80. String keyStoreType = KeyStore.getDefaultType();
  81. KeyStore keyStore = KeyStore.getInstance(keyStoreType);
  82. keyStore.load(null, null);
  83. for (int i = 0; i < files.length; i++) {
  84. int index = files[i].lastIndexOf('.');
  85. if (index == -1 || !files[i].substring(index).equals(".cer")) {
  86. continue;
  87. }
  88. keyStore.setCertificateEntry("CA" + i, cf.generateCertificate(assetManager.open(path + "/" + files[i])));
  89. }
  90. return keyStore;
  91. }
  92. private KeyStore getCertsFromKeyStore(String storeType) throws GeneralSecurityException, IOException {
  93. KeyStore store = KeyStore.getInstance(storeType);
  94. store.load(null);
  95. return store;
  96. }
  97. }