<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: bondr007</title>
    <description>The latest articles on DEV Community by bondr007 (@bondr007).</description>
    <link>https://dev.to/bondr007</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F327904%2Fbef7addc-3cbb-4c0c-b8c3-3054d03d67a2.png</url>
      <title>DEV Community: bondr007</title>
      <link>https://dev.to/bondr007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bondr007"/>
    <language>en</language>
    <item>
      <title>Active Directory LDAPS the easy way</title>
      <dc:creator>bondr007</dc:creator>
      <pubDate>Fri, 14 Feb 2020 17:29:42 +0000</pubDate>
      <link>https://dev.to/bondr007/active-directory-ldaps-the-easy-way-1bnc</link>
      <guid>https://dev.to/bondr007/active-directory-ldaps-the-easy-way-1bnc</guid>
      <description>&lt;p&gt;Skip ahead to Setup LDAPS using self-signed cert made with openssl if you do not need any background information.&lt;br&gt;
Also,check out &lt;a href="https://github.com/bondr007/HowTo-ActiveDirectory-LDAPS-Openssl"&gt;my accompanying github repo&lt;/a&gt; which contains all the files used in this guide. Inside, see &lt;a href="https://github.com/bondr007/HowTo-ActiveDirectory-LDAPS-Openssl/blob/master/just_the_commands.md"&gt;just_the_commands.md&lt;/a&gt; to quickly run through just the commands.&lt;/p&gt;
&lt;h2&gt;
  
  
  Insecure LDAP is dying, Long Live Secure LDAPS
&lt;/h2&gt;

&lt;p&gt;Microsoft will begin enforcing secure connections for Active Directory LDAP &lt;del&gt;in &lt;a href="https://support.microsoft.com/en-us/help/4520412/2020-ldap-channel-binding-and-ldap-signing-requirement-for-windows"&gt;March of 2020&lt;/a&gt;.&lt;/del&gt; Update: Microsoft has extended the deadline to "&lt;a href="https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/ADV190023"&gt;second half of calendar year 2020&lt;/a&gt;". This is the third extension Microsoft has made since first announcing this change in 2017. Active Directory has long been a haven of questionable security. Microsoft has made several great improvements for security in recent years and this most recent change is designed to plug one of the long-lived security weaknesses of Active Directory.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why is it needed
&lt;/h2&gt;

&lt;p&gt;Many services using Active Directory communicate over plain-text LDAP binds on port 389 for authentication and queries. Active Directory joined machines authenticate using windows integrated authentication which uses encrypted methods such as kerberos or NTLM. In the same way that plain-text HTTP is insecure, LDAP is also vulnerable to man-in-the-middle attacks and the exposure of sensitive information such as username/passwords. LDAPS, like HTTPS, transmits its data over an encrypted tunnel using SSL or TLS. &lt;/p&gt;
&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;For Active Directory to use LDAPS, just like a web server using HTTPS, it needs a certificate issued to it and installed. If you are familiar with certs for web servers then you are already familiar with the process. First, create a  certificate signing request (CSR), send that to a certificate authority (CA), and then install the client certificate created from the CA. &lt;a href="https://www.cloudflare.com/learning/ssl/how-does-ssl-work/"&gt;Here is a great article by cloudflare about SSL/TLS and certs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Self-signed or public CA.
&lt;/h2&gt;

&lt;p&gt;Publicly signed certs are often already trusted by many services, but are not free  if the cert  has a validity period of greater than a few months. For most systems connecting using LDAPS, this benefit of a cert from a public CA is moot since they have a separate truststore just for LDAPS that typically does not contain any public CAs. For a vast majority of people Self-signed is the way to go, since it is free and you can set long expiration dates.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why not a Microsoft CA Server
&lt;/h2&gt;

&lt;p&gt;When initially looking to configure LDAPS for AD I looked into creating a Microsoft CA server. I ran into several limitations for my use case. First, I found Microsoft's documentation to be quite long and unnecessarily confusing. Once I figured it all out, it was not too bad, but as you will see the openssl route is quite a bit easier as long as it fits your use case. The primary reason to use Microsoft CA Server is if you plan on issuing certs for other internal only services like internal web servers. Due to the abundance of methods to get free, publicly signed certs, like &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt; for web servers, I prefer to use a publicly signed cert even for internal web servers.&lt;/p&gt;
&lt;h1&gt;
  
  
  See if your application is using plain-text LDAP
&lt;/h1&gt;

&lt;p&gt;From the server running your application you can look at the outbound network traffic and check if there is anything communicating to one of your AD Domain Controllers IP addresses over the default LDAP port of 389. LDAPS uses port 636. The netstat command can be used on both linux and windows to see your open network connections.&lt;/p&gt;
&lt;h3&gt;
  
  
  Find connections on port 389: Linux
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;foo@bar:~&lt;span class="nv"&gt;$ &lt;/span&gt;netstat &lt;span class="nt"&gt;-antlp&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;389 | &lt;span class="nb"&gt;grep &lt;/span&gt;ESTABLISHED
tcp        0      0 127.0.0.1:46046         192.168.1.10:389        ESTABLISHED -
tcp        0      0 127.0.0.1:34389         216.58.194.78:443       ESTABLISHED -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We can see that this machine is communicating to port 389 on the ip 192.168.1.10 which is an AD Domain controller in my test environment.&lt;/p&gt;
&lt;h3&gt;
  
  
  find connections on port 389: Windows
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Windows\system32&amp;gt;netstat -ant | findstr 389 | findstr ESTABLISHED
  TCP    127.0.0.1:46046        192.168.1.10:389       ESTABLISHED     InHost
  TCP    127.0.0.1:43894        10.2.212.20:64284      ESTABLISHED     InHost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Again we see 192.168.1.10:389 which indicates a program connecting to a AD controller using LDAP on port 389&lt;/p&gt;
&lt;h1&gt;
  
  
  Setup LDAPS using self-signed cert made with openssl
&lt;/h1&gt;
&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;openssl&lt;/li&gt;
&lt;li&gt;Need to know:

&lt;ul&gt;
&lt;li&gt;your active directory domain name. ex: &lt;strong&gt;example.com&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;your active directory domain controller's name. ex: &lt;strong&gt;ad01.example.com&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is how to install openssl if you do not already have it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#For Debian/Ubuntu 
sudo apt-get install openssl
#For rhel/centos
sudo yum -y install openssl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is also possible to install it on windows. See this guide for installing openssl on windows: &lt;a href="https://tecadmin.net/install-openssl-on-windows/"&gt;https://tecadmin.net/install-openssl-on-windows/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating your own CA
&lt;/h3&gt;

&lt;p&gt;First create a directory to work in. &lt;em&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: make your life easy and mount a directory on your AD controller from the machine with openssl. We will need to move a few files back and forth and mounting it over smb makes this easy. See these instructions on how to &lt;a href="https://github.com/bondr007/HowTo-ActiveDirectory-LDAPS-Openssl/blob/master/just_the_commands.md#enviroment-setup"&gt;mount an smb share in Ubuntu&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Create a text file named ca_san.conf with the following contents, modifying as needed. ex: "example.com" to your domain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;#ca_san.conf
&lt;/span&gt;[ &lt;span class="n"&gt;req&lt;/span&gt; ]
&lt;span class="n"&gt;distinguished_name&lt;/span&gt; = &lt;span class="n"&gt;req_distinguished_name&lt;/span&gt;
&lt;span class="n"&gt;req_extensions&lt;/span&gt;     = &lt;span class="n"&gt;v3_ca&lt;/span&gt;

[ &lt;span class="n"&gt;req_distinguished_name&lt;/span&gt; ]
&lt;span class="c"&gt;# Descriptions
&lt;/span&gt;&lt;span class="n"&gt;countryName&lt;/span&gt;=&lt;span class="n"&gt;Country&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; (&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="n"&gt;letter&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;)
&lt;span class="n"&gt;stateOrProvinceName&lt;/span&gt;=&lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;Province&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; (&lt;span class="n"&gt;full&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;)
&lt;span class="n"&gt;localityName&lt;/span&gt;=&lt;span class="n"&gt;Locality&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; (&lt;span class="n"&gt;eg&lt;/span&gt;, &lt;span class="n"&gt;city&lt;/span&gt;)
&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="n"&gt;organizationName&lt;/span&gt;=&lt;span class="n"&gt;Your&lt;/span&gt; &lt;span class="n"&gt;Company&lt;/span&gt;/&lt;span class="n"&gt;Organization&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;.
&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="n"&gt;organizationName&lt;/span&gt;=&lt;span class="n"&gt;Organizational&lt;/span&gt; &lt;span class="n"&gt;Unit&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; (&lt;span class="n"&gt;Department&lt;/span&gt;)
&lt;span class="n"&gt;commonName&lt;/span&gt;=&lt;span class="n"&gt;Your&lt;/span&gt; &lt;span class="n"&gt;Domain&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;

&lt;span class="c"&gt;#Modify for your details here or answer the prompts from openssl
&lt;/span&gt;&lt;span class="n"&gt;countryName_default&lt;/span&gt;=&lt;span class="n"&gt;US&lt;/span&gt;
&lt;span class="n"&gt;stateOrProvinceName_default&lt;/span&gt;=&lt;span class="n"&gt;Texas&lt;/span&gt;
&lt;span class="n"&gt;localityName_default&lt;/span&gt;=&lt;span class="n"&gt;Dallas&lt;/span&gt;
&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="n"&gt;organizationName_default&lt;/span&gt;=&lt;span class="n"&gt;My&lt;/span&gt; &lt;span class="n"&gt;Company&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="n"&gt;LTD&lt;/span&gt;.
&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="n"&gt;organizationName_default&lt;/span&gt;=&lt;span class="n"&gt;IT&lt;/span&gt;
&lt;span class="n"&gt;commonName_default&lt;/span&gt;=&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
[ &lt;span class="n"&gt;v3_ca&lt;/span&gt; ]
&lt;span class="n"&gt;keyUsage&lt;/span&gt;=&lt;span class="n"&gt;critical&lt;/span&gt;,&lt;span class="n"&gt;keyCertSign&lt;/span&gt;
&lt;span class="n"&gt;basicConstraints&lt;/span&gt;=&lt;span class="n"&gt;critical&lt;/span&gt;,&lt;span class="n"&gt;CA&lt;/span&gt;:&lt;span class="n"&gt;TRUE&lt;/span&gt;,&lt;span class="n"&gt;pathlen&lt;/span&gt;:&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;extendedKeyUsage&lt;/span&gt;=&lt;span class="n"&gt;serverAuth&lt;/span&gt;
&lt;span class="n"&gt;subjectAltName&lt;/span&gt; = @&lt;span class="n"&gt;alt_names&lt;/span&gt;
&lt;span class="c"&gt;#Modify for your details. Must include the commonName in the list below also. 
#The *.example.com will allow all Domain controllers with 
#the hostname somthing.example.com to use the cert.
&lt;/span&gt;[&lt;span class="n"&gt;alt_names&lt;/span&gt;]
&lt;span class="n"&gt;DNS&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; = *.&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;DNS&lt;/span&gt;.&lt;span class="m"&gt;2&lt;/span&gt; = &lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next save that file to a directory named LDAPS, then run the following commands to create the CA key and cert:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;foo@bar:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;LDAPS &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;LDAPS

&lt;span class="c"&gt;# generate the ca key, create a password and keep it for use throughout this guide.&lt;/span&gt;
foo@bar:~/LDAPS&lt;span class="nv"&gt;$ &lt;/span&gt;openssl genrsa &lt;span class="nt"&gt;-des3&lt;/span&gt; &lt;span class="nt"&gt;-out&lt;/span&gt; ca.key 4096
Generating RSA private key, 4096 bit long modulus &lt;span class="o"&gt;(&lt;/span&gt;2 primes&lt;span class="o"&gt;)&lt;/span&gt;
...........++++
.............................................................................................++++
Enter pass phrase &lt;span class="k"&gt;for &lt;/span&gt;ca.key:
Verifying - Enter pass phrase &lt;span class="k"&gt;for &lt;/span&gt;ca.key:

&lt;span class="c"&gt;# create ca cert with valid of 10 years with info based off the &lt;/span&gt;
&lt;span class="c"&gt;# provided ca_san.conf file, it will prompt for the password we created earlier &lt;/span&gt;
foo@bar:~/LDAPS&lt;span class="nv"&gt;$ &lt;/span&gt;openssl req &lt;span class="nt"&gt;-new&lt;/span&gt; &lt;span class="nt"&gt;-x509&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-extensions&lt;/span&gt; v3_ca &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-days&lt;/span&gt; 3650 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-key&lt;/span&gt; ca.key &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-out&lt;/span&gt; ca.crt &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-config&lt;/span&gt; ca_san.conf

foo@bar:~/LDAPS&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls
&lt;/span&gt;ca.crt  ca.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have created two files: ca.key and ca.crt&lt;/p&gt;

&lt;p&gt;Next, we will add the ca.crt as a Trusted Root Certificate and create a (CSR) on an AD controller&lt;/p&gt;

&lt;p&gt;In powershell, &lt;strong&gt;as Admin&lt;/strong&gt;, on an AD controller copy over the ca.crt file and run the following to import it as a Trusted Root Certificate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;#import the cert as a trusted CA on the domain controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Import-Certificate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-FilePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ca.crt&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-CertStoreLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'Cert:\LocalMachine\Root'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Verbose&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a text file named request.inf with the following contents edited for your environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;;----------------- request.inf -----------------
&lt;/span&gt;&lt;span class="nn"&gt;[Version]&lt;/span&gt;
 &lt;span class="py"&gt;Signature&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"$Windows NT$"&lt;/span&gt;

&lt;span class="c"&gt;;The Subject will need to be your active directory domain name
&lt;/span&gt;&lt;span class="nn"&gt;[NewRequest]&lt;/span&gt;
 &lt;span class="py"&gt;Subject&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"CN=example.com"&lt;/span&gt;
 &lt;span class="py"&gt;KeySpec&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;1&lt;/span&gt;
 &lt;span class="py"&gt;KeyLength&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;4096&lt;/span&gt;
 &lt;span class="py"&gt;Exportable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;TRUE&lt;/span&gt;
 &lt;span class="py"&gt;MachineKeySet&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;TRUE&lt;/span&gt;
 &lt;span class="py"&gt;SMIME&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;FALSE&lt;/span&gt;
 &lt;span class="py"&gt;PrivateKeyArchive&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;FALSE&lt;/span&gt;
 &lt;span class="py"&gt;UserProtected&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;FALSE&lt;/span&gt;
 &lt;span class="py"&gt;UseExistingKeySet&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;FALSE&lt;/span&gt;
 &lt;span class="py"&gt;ProviderName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Microsoft RSA SChannel Cryptographic Provider"&lt;/span&gt;
 &lt;span class="py"&gt;ProviderType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;12&lt;/span&gt;
 &lt;span class="py"&gt;RequestType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;PKCS10&lt;/span&gt;
 &lt;span class="py"&gt;KeyUsage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0xa0&lt;/span&gt;

&lt;span class="nn"&gt;[EnhancedKeyUsageExtension]&lt;/span&gt;
 &lt;span class="py"&gt;OID&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;1.3.6.1.5.5.7.3.1 ; Server Authentication&lt;/span&gt;
&lt;span class="c"&gt;;The following will add a subject alternative name of a wildcard cert on *.example.com
;so any ad controller with a hostname of somththing.example.com can use it.
&lt;/span&gt;&lt;span class="nn"&gt;[Extensions]&lt;/span&gt;
&lt;span class="py"&gt;2.5.29.17&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"{text}"&lt;/span&gt;
&lt;span class="py"&gt;_continue_&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"dns=*.example.com&amp;amp;"&lt;/span&gt;
&lt;span class="py"&gt;_continue_&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"dns=example.com&amp;amp;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, on the AD controller run certreq passing in the request.inf we created and specifying the output file ad.csr&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;certreq&lt;/span&gt; &lt;span class="na"&gt;-new &lt;/span&gt;&lt;span class="kd"&gt;request&lt;/span&gt;.inf &lt;span class="kd"&gt;ad&lt;/span&gt;.csr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the ad.csr over to your machine with openssl and create a new text file named v3ext.txt with the following contents, editing the &lt;strong&gt;alt_names&lt;/strong&gt; to your domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# v3ext.txt
&lt;/span&gt;&lt;span class="n"&gt;keyUsage&lt;/span&gt;=&lt;span class="n"&gt;digitalSignature&lt;/span&gt;,&lt;span class="n"&gt;keyEncipherment&lt;/span&gt;
&lt;span class="n"&gt;extendedKeyUsage&lt;/span&gt;=&lt;span class="n"&gt;serverAuth&lt;/span&gt;
&lt;span class="n"&gt;subjectKeyIdentifier&lt;/span&gt;=&lt;span class="n"&gt;hash&lt;/span&gt;
&lt;span class="n"&gt;subjectAltName&lt;/span&gt; = @&lt;span class="n"&gt;alt_names&lt;/span&gt;
&lt;span class="c"&gt;#Modify for your details. Must include the commonName in the list below also. 
#The *.example.com will allow all Domain controllers with 
#the hostname somthing.example.com to use the cert.
&lt;/span&gt;[&lt;span class="n"&gt;alt_names&lt;/span&gt;]
&lt;span class="n"&gt;DNS&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt; = *.&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;DNS&lt;/span&gt;.&lt;span class="m"&gt;2&lt;/span&gt; = &lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now run the following command to generate the cert for AD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# create ad_ldaps_cert by signing the csr&lt;/span&gt;
&lt;span class="c"&gt;# 825 days is the maximum for a cert to be trusted as dictated by &lt;/span&gt;
&lt;span class="c"&gt;# the new 2019 guidelines from the CA/Browser Forum&lt;/span&gt;
&lt;span class="c"&gt;# This is important since macOS has began to enforce this guideline&lt;/span&gt;
openssl x509 &lt;span class="nt"&gt;-req&lt;/span&gt; &lt;span class="nt"&gt;-days&lt;/span&gt; 825 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-in&lt;/span&gt; ad.csr &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-CA&lt;/span&gt; ca.crt &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-CAkey&lt;/span&gt; ca.key &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-extfile&lt;/span&gt; v3ext.txt &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-set_serial&lt;/span&gt; 01 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-out&lt;/span&gt; ad_ldaps_cert.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy ad_ldaps_cert.crt over to the machine back to the AD Controller and accept the cert&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# accept the signed cert &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;certreq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-accept&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ad_ldaps_cert.crt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can check that the cert has been imported by running the following powershell. We should see CN=example.com&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\LDAPS&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cert:\LocalMachine\My"&lt;/span&gt;&lt;span class="w"&gt;

   &lt;/span&gt;&lt;span class="n"&gt;PSParentPath:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Microsoft.PowerShell.Security\Certificate::LocalMachine\My&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Thumbprint&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="nx"&gt;Subject&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;----------&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="o"&gt;-------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;087&lt;/span&gt;&lt;span class="n"&gt;B0AB4E62DCE1D33323209EA81F2D58E0BF3B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;CN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great, now our cert is imported and ready to be used. Now we can restart the AD Controller or create the following file and run a command to tell AD to start using LDAPS&lt;/p&gt;

&lt;p&gt;enable_ldaps.txt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dn:
changetype: modify
add: renewServerCertificate
renewServerCertificate: 1
-
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run this command passing in the text file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\LDAPS&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ldifde&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;enable_ldaps.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Connecting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ad01.example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Logging&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SSPI&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Importing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enable_ldaps.txt"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Loading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;entries..&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;modified&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;successfully.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;completed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;successfully&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To test that we can use openssl to connect and verify, we can establish a secure connection to our AD controller&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl s_client &lt;span class="nt"&gt;-connect&lt;/span&gt; nsut-ad01.example.com:636 &lt;span class="nt"&gt;-CAfile&lt;/span&gt; ca.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add Cert to all domain controllers.
&lt;/h3&gt;

&lt;p&gt;To add the cert and privatekey to all of our domain controllers we need to export the cert/privatekey to a pfx file to be imported on each AD DC.&lt;/p&gt;

&lt;p&gt;First, we need to get the Thumbprint of our cert to export it. Run this powershell to list your certs under the &lt;strong&gt;Cert:\LocalMachine\My&lt;/strong&gt; cert store:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\LDAPS&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cert:\LocalMachine\My"&lt;/span&gt;&lt;span class="w"&gt;

   &lt;/span&gt;&lt;span class="n"&gt;PSParentPath:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Microsoft.PowerShell.Security\Certificate::LocalMachine\My&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Thumbprint&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="nx"&gt;Subject&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;----------&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="o"&gt;-------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;087&lt;/span&gt;&lt;span class="n"&gt;B0AB4E62DCE1D33323209EA81F2D58E0BF3B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;CN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specify a password and copy the thumbprint from the above output and replace it in the below command to export the cert/private key to a pfx file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# For security reasons we must create a password to encrypt the privatekey. Edit for YOURPASSWORD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$pfxPass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ConvertTo-SecureString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AsPlainText&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOURPASSWORD"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#export cert/privatekey to a pfx file.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cert:\LocalMachine\My\087B0AB4E62DCE1D33323209EA81F2D58E0BF3B5"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Export-PfxCertificate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-FilePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;LDAPS_PRIVATEKEY.pfx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$pfxPass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we will have a file named LDAPS_PRIVATEKEY.pfx that contains the cert and privatekey for our active directory domain controllers to use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test all the Domain Controllers
&lt;/h3&gt;

&lt;p&gt;The Following Powershell will test all of our Active Directory Domain Controllers for LDAPS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;##################&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#### TEST ALL AD DCs for LDAPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;##################&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$AllDCs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-ADDomainController&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;nsuok.edu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Hostname&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$dc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$AllDCs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$LDAPS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ADSI&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="s2"&gt;"LDAP://&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$dc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hostname&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:636"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="c"&gt;#write-host $LDAPS&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$Connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;adsi&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nv"&gt;$LDAPS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$Connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Write-Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Active Directory server correctly configured for SSL, test connection to &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$LDAPS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Path&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; completed."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Write-Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Active Directory server not configured for SSL, test connection to LDAP://&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$dc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hostname&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:636 did not work."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Congratulations
&lt;/h3&gt;

&lt;p&gt;You now have all your domain controllers configured to use Secure LDAPS. But this is just half the battle, we now need to configure all of our Services, Apps, AD joined macOS computers and Servers to use LDAPS.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to find what systems and servers are using insecure LDAP Binds
&lt;/h3&gt;

&lt;p&gt;Read my next article to learn how to turn on logging in Active Directory and export the logs to CSV using powershell.&lt;br&gt;
Coming soon.&lt;/p&gt;

</description>
      <category>ldap</category>
      <category>ldaps</category>
      <category>activedirectory</category>
      <category>openssl</category>
    </item>
  </channel>
</rss>
