servidor para instalar instalaciĆ³n certificados certificado android ssl ldap certificate unboundid-ldap-sdk

android - para - instalar certificado.cer en linux



Uso de UnboundID SDK con un archivo de certificado SSL para conectarse al servidor LDAP en la aplicaciĆ³n de Android (1)

Intento establecer una conexión con un servidor LDAP en mi aplicación de Android y estoy usando el SDK de UnboundID. Recientemente, se realizó un cambio de LDAP no segura a segura, y tengo que cambiar la aplicación en consecuencia. Me han dado el archivo de certificados SSL para validarme. Ya he usado el archivo para hacer un almacén de claves como se describe aquí . Tengo este archivo de almacén de claves en la carpeta de activos de mi aplicación, y estoy sacando de eso. El código siguiente no funciona actualmente y arroja la excepción:

LDAPException (resultCode = 01 (error de conexión), errorMessage = (''Se produjo un error al intentar conectarse al servidor place.myserver.com:636: javax.net.ssl.SSLHandShakeException: java.security.cert.CertPathValidatorException: Trust anchor for ruta de certificación no encontrada

// code from above link AssetManager assetManager = getApplicationContext().getAssets(); InputStream keyStoreInputStream = assetManager.open("yourapp.store"); KeyStore trustStore = KeyStore.getInstance("BKS"); trustStore.load(keyStoreInputStream, "myPassword".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); tmf.init(trustStore); // my code SSLUtil sslUtil = new SSLUtil(tmf.getTrustManagers()); LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory()); connection.connect("place.myserver.com", 636);

Sin embargo, el segmento de código:

SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager()); LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory()); connection.connect("place.myserver.com", 636);

funciona (aunque fui informado por los superiores de que esto sería inseguro). No estoy muy seguro de qué estoy haciendo exactamente mal aquí, por lo que cualquier ayuda sería apreciada. Además, si hay una forma mejor de lograr esto que lo que estoy tratando de hacer, no dude en hacérmelo saber :) Sin embargo, me gustaría seguir con la biblioteca de UnboundID, ya que el resto del código ya está escrito usando eso también, y todo funciona si uso TrustAllTrustManager.


Es cierto que confiar en el administrador de confianza no es seguro. Es conveniente para fines de prueba, pero permitirá a un chico malo establecer su propio servidor con un certificado que él mismo genera y usarlo para hacerse pasar por el servidor real, o para operar como un hombre en el medio, interceptando y alertando potencialmente a cualquier comunicación entre el cliente y el servidor real. Con un administrador de confianza más estricto, el cliente debe rechazar el certificado falso que presentará el servidor falso.

Desafortunadamente, sin embargo, parece que el administrador de confianza que está tratando de utilizar en este caso no le gusta el certificado que le presenta su servidor. Debido a que confiar en que todos los administradores de confianza le permiten establecer la conexión, eso significa que su servidor tiene un certificado y es capaz de realizar comunicaciones SSL, pero hay algo acerca de ese certificado que no le gusta a su administrador de confianza. Es casi seguro que no es un problema con el LDAP SDK, ya que el mismo problema debería surgir con cualquier otra API LDAP si está utilizando el mismo almacén de confianza.

Si observa el resultado, tiene un mensaje de "Trust anchor for certification path not found". Esto implica que ni el certificado que el servidor está utilizando ni los de ninguno de sus emisores se encontraron en el almacén de confianza. Tendrá que importar el certificado del servidor (o el certificado de uno de sus emisores) al almacén de confianza que está utilizando. Parece que has intentado hacer eso, pero como no funciona, algo no debe ser del todo correcto en la forma en que se hizo. Recomiendo trabajar con el administrador del servidor de directorios para asegurarse de que está tratando de importar el certificado correcto según la configuración del servidor.