generar firmar crear con como certificado ssl ldap openssl ssl-certificate edirectory

firmar - generar.key ssl



Cómo guardar el certificado LDAP SSL de OpenSSL (6)

Quería el certificado SSL de mi servidor LDAP, que es Novell eDirectory. He usado openssl para conectarme a ldap y ver el certificado.

openssl s_client -connect 192.168.1.225:636

Solo está imprimiendo el certificado. ¿Cómo puedo guardar esto en algún archivo de formato de certificado?


Copie todo entre -----BEGIN CERTIFICATE----- y -----END CERTIFICATE----- (incluyendo estos delimitadores) y péguelo en un nuevo archivo de texto (generalmente con la extensión .pem o .crt ). Puede usar su editor de texto favorito (simple) para esto, por ejemplo, Bloc de notas, Gedit, Vim, Emacs (dependiendo del sistema que esté usando).

Alternativamente, puede canalizar la salida a sed -ne ''/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'' , como se describe here :

echo -n | openssl s_client -connect 192.168.1.225:636 | sed -ne ''/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'' > ldapserver.pem


Existe una herramienta que le permite recopilar y guardar un certificado SSL / TLS de un servidor que no solo habla LDAPS, sino también LDAP / STARTTLS. Esa es una revisión del conocido programa InstallCert , escrito en Java.

Simplemente ejecútelo así:

java -jar installcert-usn-20131123.jar host_name:port

y guardará el certificado para usted en el archivo jssecacerts keystore en su árbol de archivos JRE, y también en el archivo de almacén de claves extracerts en su directorio actual. A continuación, puede usar la keytool Java para exportar los certificados a otros formatos.

Le invitamos a visitar la página de mi blog. Otro InstallCert para Java, ahora con soporte STARTTLS para descarga e instrucciones.


La forma más sencilla que encontré para guardar un certificado de cualquier protocolo SSL habilitado como ldap, imap, pop, ftps, https, etc. es simplemente usar el navegador Chrome. Suponga que si su servidor ejecuta algún protocolo (como se mencionó), cree la url como esta

http: //: (ejemplo, si su servidor ldap se ejecuta en el puerto SSL 10636 sería https://example.com:10636 ). Simplemente pulse esta URL y obtenga el certificado del navegador Chrome en sí. Una simple demostración a continuación. En esta demostración, mi servidor ldap usa un certificado autofirmado.

Haga clic en copiar a archivo y guarde el certificado haciendo clic en siguiente.

Este método funciona para cualquier servidor que se ejecute en SSL, independientemente del protocolo.

Aclamaciones.


Nos gustó usar ldapsearch para realizar esto. Todo el proceso , algunas líneas, pero esta es la esencia de esto:

ldapsearch -x -T ~/ -t -h your-edirectory-host.yourdomain.com -b "cn=Security" objectclass=nDSPKICertificateAuthority cACertificate

-jim


O puede exportar fácilmente la clave pública y privada a través de iManager si las necesita en formato DER o PEM. (DER es un formato binario, PEM es un formato codificado en base64, por lo que en iManager, sus elecciones serán DER o B64 y B64 ~ = PEM en este contexto)


Para aquellos que buscan obtener los certs a través de una conexión LDAP usando StartTLS:

He vuelto a enviar un parche a OpenSSL para admitir LDAP cuando utilizo -starttls para s_client. Así que, eventualmente, esto debería funcionar (si alguna vez lo hace, supongo, todavía no a partir del 10/18/16) :

openssl s_client -connect servername:389 -starttls ldap -showcerts

Editar : El soporte finalmente se fusionó en este PR . C no es mi fuerte, afortunadamente alguien más corrió con él;)

También escribí una función PHP para extraer los certificados SSL después de emitir un comando STARTTLS a través de una conexión TCP. Podría portarse fácilmente a otros idiomas con un poco de trabajo:

/** * @param string $server The server name to connect to * @param int $port The standard LDAP port * @return array In the form of [''peer_certificate'' => '''', ''peer_certificate_chain'' => [] ] */ function getLdapSslCertificates($server, $port = 389) { $certificates = [ ''peer_certificate'' => null, ''peer_certificate_chain'' => [], ]; // This is the hex encoded extendedRequest for the STARTTLS operation... $startTls = hex2bin("301d02010177188016312e332e362e312e342e312e313436362e3230303337"); $opts = [ ''ssl'' => [ ''capture_peer_cert'' => true, ''capture_peer_cert_chain'' => true, ''allow_self_signed'' => true, ''verify_peer'' => false, ''verify_peer_name'' => false, ], ]; $context = stream_context_create($opts); $client = @stream_socket_client( "tcp://$server:$port", $errorNumber, $errorMessage, 5, STREAM_CLIENT_CONNECT, $context ); @stream_set_timeout($client, 2); @fwrite($client, $startTls); @fread($client, 10240); @stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); $info = @stream_context_get_params($client); if (!$info) { return $certificates; } openssl_x509_export($info[''options''][''ssl''][''peer_certificate''], $certificates[''peer_certificate'']); foreach ($info[''options''][''ssl''][''peer_certificate_chain''] as $index => $cert) { $certChain = ''''; openssl_x509_export($cert, $certChain); $certificates[''peer_certificate_chain''][$index] = $certChain; } @fclose($client); return $certificates; }

La función anterior devolverá una matriz que contiene el certificado de igual y la cadena de certificados de igual. Entonces podría usarse así:

// Just pass it the server name $certificates = getLdapSslCertificates(''dc1.example.local''); // The certificates are in the array as strings in PEM format echo $certificates[''peer_certificate''].PHP_EOL; foreach ($certificates[''peer_certificate_chain''] as $cert) { echo $cert.PHP_EOL; }