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: 06 November 2025
Tested on: -
Table of contents
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.crtto the certificate pathTrusted 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.infdefinition with the following contents - replacingACTIVE_DIRECTORY_FQDNwith 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.txtcontaining the following:keyUsage=digitalSignature,keyEncipherment extendedKeyUsage=serverAuth subjectKeyIdentifier=hash -
Create a certificate
client.crtfrom certificate requestclient.csrand 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 extensionsare all present:X509v3 Key Usage: Digital Signature, Key EnciphermentX509v3 Extended Key Usage: TLS Web Server AuthenticationX509v3 Subject Key Identifier
Accept and import certificate↑
-
On AD with
client.crtpresent, run the following:C:\> certreq -accept client.crt -
Open
Manage computer certificates, the new certificate should now be present underPersonal\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.txtcontaining 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.crtto the certificate pathTrusted Root Certification Authorities\Certificates. -
Open utility:
C:\> ldp.exe -
From
Connection, selectConnect. -
Enter name of target domain controller.
-
Enter
636as port number (this is the LDAPS port). -
Click
OKto confirm the connection works. -
You're all done!