Enable LDAP over SSL (LDAPS) for Microsoft Active Directory servers

Much more complicated than on SDS.


Author(s): Tamas Bures | Created: 17 April 2019 | Last modified: 02 October 2026
Tested on: -

Enable LDAP over SSL (LDAPS) for Microsoft Active Directory servers↑

By default Microsoft Active Directory (AD) servers will offer LDAP connections over unencrypted connections (boo!).

The steps below will create a new self signed certificate appropriate for use with and thus enabling LDAPS for an AD server. Of course the "self-signed" portion of this guide can be swapped out with a real vendor purchased certificate if required.

Steps have been tested successfully with Windows Server 2012R2, but should work with Windows Server 2008 without modification. Requires a working OpenSSL install (ideally Linux/OSX) and (obviously) a Windows Active Directory server.

Create root certificate↑

Using OpenSSL, create new private key and root certificate. Answer country/state/org questions as suitable:

$ openssl genrsa -des3 -out ca.key 4096
$ openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

You should now have a resulting ca.key and ca.crt - hold onto these.

Import root certificate into trusted store of domain controller↑

  • On AD, open Manage computer certificates.
  • Add the generated ca.crt to the certificate path Trusted Root Certification Authorities\Certificates.
  • Done.

Create client certificate↑

We will now create a client certificate to be used for LDAPS, signed against our generated root certificate.

On AD server:

  • Create a new request.inf definition with the following contents - replacing ACTIVE_DIRECTORY_FQDN with the qualified domain name of your Active Directory server:

      [Version]
      Signature="$Windows NT$"
    
      [NewRequest]
      Subject = "CN=ACTIVE_DIRECTORY_FQDN"
      KeySpec = 1
      KeyLength = 1024
      Exportable = TRUE
      MachineKeySet = TRUE
      SMIME = FALSE
      PrivateKeyArchive = FALSE
      UserProtected = FALSE
      UseExistingKeySet = FALSE
      ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
      ProviderType = 12
      RequestType = PKCS10
      KeyUsage = 0xa0
    
      [EnhancedKeyUsageExtension]
      OID = 1.3.6.1.5.5.7.3.1 ; Server Authentication
  • Run the following to create a new client certificate request of client.csr (note: it's critical this must run on AD to ensure a private key -> certificate association):

      C:\> certreq -new request.inf client.csr

Back to our OpenSSL system:

  • Create v3ext.txt containing the following:

      keyUsage=digitalSignature,keyEncipherment
      extendedKeyUsage=serverAuth
      subjectKeyIdentifier=hash
  • Create a certificate client.crt from certificate request client.csr and root certificate (with private key):

      $ openssl x509 -req -days 3650 -in client.csr -CA ca.crt -CAkey ca.key -extfile v3ext.txt -set_serial 01 -out client.crt
  • Verify generated certificate:

      $ openssl x509 -in client.crt -text
  • Ensure the following X509v3 extensions are all present:

    • X509v3 Key Usage: Digital Signature, Key Encipherment
    • X509v3 Extended Key Usage: TLS Web Server Authentication
    • X509v3 Subject Key Identifier

Accept and import certificate↑

  • On AD with client.crt present, run the following:

      C:\> certreq -accept client.crt
  • Open Manage computer certificates, the new certificate should now be present under Personal\Certificates. Ensure that:

    • Certificate has a private key association.
    • The "Intended Purposes" is defined as "Server Authentication".
    • Certificate name is the FQDN of the active directory server.

Reload active directory SSL certificate↑

Alternatively you can just reboot the server, but this method will instruct the active directory server to simply reload a suitable SSL certificate and if found, enable LDAPS:

  • Create ldap-renewservercert.txt containing the following:

      dn:
      changetype: modify
      add: renewServerCertificate
      renewServerCertificate: 1
      -
  • Run the following command:

      C:\> ldifde -i -f ldap-renewservercert.txt

Test LDAPS using ldp.exe utility↑

  • From another domain controller, firstly install our generated root certificate ca.crt to the certificate path Trusted Root Certification Authorities\Certificates.

  • Open utility:

      C:\> ldp.exe
  • From Connection, select Connect.

  • Enter name of target domain controller.

  • Enter 636 as port number (this is the LDAPS port).

  • Click OK to confirm the connection works.

  • You're all done!