servidor para ldaps instalar crear como certificado active ssl ldap ssl-certificate ldapconnection unboundid-ldap-sdk

para - instalar certificado ssl apache windows



¿Cómo usar UnboundID SDK para conectarse a un servidor LDAP con el certificado de servidor SSL? (3)

Si hay un certificado específico o un conjunto de certificados en el que desea confiar, entonces puede crear sus propias implementaciones javax.net.ssl.X509TrustManager personalizadas que examinen la cadena de certificados presentada y determine si representa uno de los certificados esperados. Podría codificar la información sobre esos certificados en su código (o mejor aún, ponerlo en un archivo de configuración para poder cambiarlo sin alterar ningún código) y hacer algo como comparar huellas dactilares de certificados para obtener un grado apropiado de seguridad de que es en realidad el certificado legítimo.

Si no sabe cuáles serán los certificados individuales, pero sabe que todos tienen un emisor común y confía en que el emisor solo emita certificados válidos, entonces podría incluir información de confianza para ese emisor.

Si desea permitir un rango de certificados desconocidos, potencialmente de emisores que no son de confianza (y no sabe con anticipación qué emisores podrían tener), y no desea solicitar al usuario que confíe en ellos (que podría caché potencialmente, así que solo tienes que preguntar una vez), entonces no estoy seguro de qué podrías hacer. A menos que pueda encontrar alguna forma de diferenciar los certificados de los buenos servidores de los servidores defectuosos, su aplicación correrá el riesgo de confiar en certificados incorrectos o de no confiar en los buenos.

Tengo en mi mano un certificado de servidor SSL LDAP. Quiero usarlo para conectarme al servidor LDAP usando UnboundID SDK.

No quiero usar com.unboundid.util.ssl.TrustAllTrustManager como se mostró aquí: Usar UnboundID SDK con un archivo de certificado SSL para conectarse al servidor LDAP en la aplicación de Android

Los siguientes TrustManagers no se ajustan a nuestros requisitos de producto:

com.unboundid.util.ssl.PromptTrustManager com.unboundid.util.ssl.HostNameTrustManager com.unboundid.util.ssl.ValidityDateTrustManager

No quiero ninguna interacción del usuario, y lo que extraño en la lista anterior del TrustManager que valida los emisores del certificado.

Además, no quiero insertar el certificado del servidor LDAP en ningún almacén de claves, así que no puedo usar los siguientes TrustManagers:

com.unboundid.util.ssl.WrapperKeyManager com.unboundid.util.ssl.PKCS11KeyManager com.unboundid.util.ssl.KeyStoreKeyManager

Quiero hacer algo como el siguiente código:

CertificateFactory cf = CertificateFactory.getInstance("X.509"); Certificate cert = cf.generateCertificate(byteArrayInputStream); SSLUtil sslUtil = new SSLUtil(new CertificateTrustManager(cert)); SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory(); LDAPConnection connection = new LDAPConnection(socketFactory, "server.example.com", 636);

Tenga en cuenta que CertificateTrustManager no existe en UnboundID SDK. ¿Cómo es posible hacerlo?


Aunque no se recomienda por razones de seguridad, a veces puede ser útil al menos para situaciones de prueba utilizar TrustAllTrustManager de la siguiente manera:

TrustAllTrustManager tm = new TrustAllTrustManager(); TrustManager[] trustManagers = new TrustManager[] {tm}; SSLUtil sslUtil = new SSLUtil(trustManagers); SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory(); LDAPConnection connection = new LDAPConnection(socketFactory);

¡Esto NO se debe usar para entornos de producción!


Encontré la solución usando Using UnboundID SDK con un archivo de certificado SSL para conectarme al servidor LDAP en la aplicación de Android y cómo importar un certificado .cer en un almacén de claves de Java. (respuesta de Patrick M).

Ahora puedo tomar un certificado de UI y conectarme a LDAP a través de SSL :)

import com.unboundid.ldap.sdk.LDAPConnection; import com.unboundid.util.ssl.SSLUtil; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import java.io.ByteArrayInputStream; import java.security.KeyStore; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; String base64EncodedCertificateString = "..."; ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64EncodedCertificateString.getBytes()); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null); CertificateFactory cf = CertificateFactory.getInstance("X.509"); int i = 0; while (byteArrayInputStream.available() > 0) { Certificate cert = cf.generateCertificate(byteArrayInputStream); trustStore.setCertificateEntry("cert " + i++, cert); } TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); tmf.init(trustStore); TrustManager[] trustManagers = tmf.getTrustManagers(); SSLUtil sslUtil = new SSLUtil(trustManagers); SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory(); LDAPConnection connection = new LDAPConnection(socketFactory); connection.connect("place.myserver.com", 636);