Skip to content

Commit c93090d

Browse files
rajujithJithin Raju
andauthored
Document LDAPS configuration for LDAP integration (#612)
* Document LDAPS configuration for LDAP integration Added detailed instructions for configuring LDAPS/LDAP SSL trust for LDAP integration with Apache CloudStack, including certificate retrieval, truststore creation, and LDAP settings configuration. * Refactor LDAP settings table format Reformatted LDAP settings table for clarity and consistency. * Update LDAP settings format Update LDAP settings format * Revise LDAP settings and restart instructions Updated LDAP settings and descriptions for clarity. Added instructions for restarting CloudStack Management Services after configuration changes. * Fix typo: change microsftad to microsoftad in LDAP provider settings * Improve LDAP Settings table layout and fix typo - Adjust LDAP Settings table column widths to 20-25-55 for better readability - Add table-layout:fixed CSS to enforce column width specifications - Fix typo: microsftad -> microsoftad in ldap.provider setting --------- Co-authored-by: Jithin Raju <jithinraju@SB-MacBook-Air.local>
1 parent 006eb45 commit c93090d

2 files changed

Lines changed: 170 additions & 33 deletions

File tree

‎source/_static/theme_overrides.css‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@
1111
overflow: visible;
1212
}
1313

14+
/* Force table to respect column widths */
15+
.wy-table-responsive table {
16+
table-layout: fixed;
17+
width: 100%;
18+
}
19+
20+
.wy-table-responsive table td,
21+
.wy-table-responsive table th {
22+
overflow-wrap: break-word;
23+
word-wrap: break-word;
24+
}
25+
1426
.rst-content li {
1527
padding-top: 4px;
1628
}

‎source/adminguide/accounts.rst‎

Lines changed: 158 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -488,51 +488,72 @@ OpenLDAP)
488488

489489
.. list-table:: LDAP Settings
490490
:header-rows: 1
491+
:widths: 20 25 55
491492

492493
* - Setting
493-
- OpenLDAP
494-
- Active Directory
494+
- OpenLDAP / Active Directory
495495
- Description
496496
* - ``ldap.basedn``
497-
- `Ex: OU=APAC, DC=company, DC=com`
498-
- `Ex: DC=company, DC=com`
499-
- Sets the basedn for LDAP.
497+
- ``OU=APAC,DC=company,DC=com``
498+
- Sets the base DN for LDAP searches.
500499
* - ``ldap.search.group.principle``
501-
- `Ex: CN=ACSGroup, DC=company, DC=com`
502-
- `Ex: CN=ACSGroup, CN=Users, DC=company, DC=com`
503-
- (optional) if set only Users from this group are listed.
500+
- ``CN=ACSGroup,DC=company,DC=com``
501+
- *(Optional)* If set, only users belonging to this group are listed.
504502
* - ``ldap.bind.principal``
505-
- `Ex: CN=ACSServiceAccount, OU=APAC, DC=company, DC=com`
506-
- `Ex: CN=ACSServiceAccount, CN=Users, DC=company, DC=com`
507-
- Service account that can list all the Users in the above basedn. Avoid using privileged account such as Administrator.
503+
- ``CN=ACSServiceAccount,OU=APAC,DC=company,DC=com``
504+
- Service account used to list users under the configured base DN.
505+
Avoid using privileged accounts such as ``Administrator``.
508506
* - ``ldap.bind.password``
509-
- `******************`
510-
- `******************`
511-
- Password for a DN User. Is entered in plain text but gets stored encrypted.
507+
- ``****************``
508+
- Password for the bind DN. Entered in plain text but stored encrypted.
512509
* - ``ldap.user.object``
513-
- `interorgperson`
514-
- `user`
515-
- Object type of Users within LDAP.
510+
- * OpenLDAP: ``inetOrgPerson``
511+
* Active Directory: ``user``
512+
- LDAP object class representing user accounts.
516513
* - ``ldap.email.attribute``
517-
- `mail`
518-
- `mail`
519-
- Email attribute within ldap for a User.
514+
- ``mail``
515+
- Attribute used to retrieve the user email address.
520516
* - ``ldap.firstname.attribute``
521-
- `givenname`
522-
- `givenname`
523-
- firstname attribute within ldap for a User.
517+
- ``givenName``
518+
- Attribute used to retrieve the user first name.
524519
* - ``ldap.lastname.attribute``
525-
- `sn`
526-
- `sn`
527-
- lastname attribute within ldap for a User.
520+
- ``sn``
521+
- Attribute used to retrieve the user last name.
528522
* - ``ldap.group.object``
529-
- `groupOfUniqueNames`
530-
- `groupOfUniqueNames`
531-
- Object type of groups within LDAP.
523+
- * OpenLDAP: ``groupOfUniqueNames``
524+
* Active Directory: ``group``
525+
- LDAP object class representing groups.
532526
* - ``ldap.group.user.uniquemember``
533-
- `uniquemember`
534-
- `uniquemember`
535-
- Attribute for uniquemembers within a group.
527+
- ``uniqueMember``
528+
- Attribute defining user membership within a group.
529+
* - ``ldap.username.attribute``
530+
- * OpenLDAP: ``uid``
531+
* Active Directory: ``sAMAccountName``
532+
- Sets the username attribute used within LDAP.
533+
* - ``ldap.nested.groups.enable``
534+
- ``true``
535+
- If true, nested groups will also be queried.
536+
* - ``ldap.provider``
537+
- * OpenLDAP: ``openldap``
538+
* Active Directory: ``microsoftad``
539+
- LDAP provider (e.g. ``openldap``, ``microsoftad``).
540+
541+
542+
543+
Restart CloudStack Management Services
544+
545+
546+
After updating the configuration, restart the CloudStack Management Server:
547+
548+
.. code-block:: bash
549+
550+
systemctl restart cloudstack-management
551+
552+
Notes
553+
554+
555+
* Configuration changes do not take effect until the management service is restarted.
556+
536557

537558
.. note:: ``ldap.search.group.principle`` is required when using ``linkaccounttoldap``.
538559

@@ -566,7 +587,111 @@ You will need to know the path to the keystore and the password.
566587
- ``ldap.truststore.password`` : truststore password
567588

568589

569-
.. |button to dedicate a zone, pod,cluster, or host| image:: /_static/images/dedicate-resource-button.png
590+
Configuring LDAPS/ LDAP SSL Trust for LDAP Integration
591+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
592+
593+
When integrating Apache CloudStack with an LDAP directory over **LDAPS (TCP 636)**,
594+
the CloudStack Management Server must trust the TLS certificate presented by the
595+
LDAP server. This trust is established by importing the LDAP server certificate
596+
into a Java truststore and configuring CloudStack to use that truststore for LDAP
597+
communication.
598+
599+
Retrieve the LDAP Server Certificate
600+
601+
602+
1. On a CloudStack Management Server, navigate to the CloudStack management
603+
configuration directory:
604+
605+
.. code-block:: bash
606+
607+
cd /etc/cloudstack/management/
608+
609+
2. Retrieve **only the LDAP server certificate** (not the full certificate chain
610+
or root CA):
611+
612+
.. code-block:: bash
613+
614+
echo "" | openssl s_client -connect ldap.example.com:636 -showcerts 2>/dev/null | \
615+
openssl x509 -out ldap-server-certificate.pem
616+
617+
3. Verify the retrieved certificate:
618+
619+
.. code-block:: bash
620+
621+
openssl x509 -in ldap-server-certificate.pem -noout -text
622+
623+
Ensure that the certificate details (Subject, Issuer, and validity dates)
624+
match the LDAP server configuration.
625+
626+
Create and Populate a Java Truststore
627+
628+
629+
1. Import the LDAP server certificate into a Java KeyStore (JKS):
630+
631+
.. code-block:: bash
632+
633+
keytool -importcert \
634+
-alias ldap-server \
635+
-file ldap-server-certificate.pem \
636+
-trustcacerts \
637+
-keystore cloudstack-ldap-truststore.jks \
638+
-storetype JKS
639+
640+
2. Verify the contents of the truststore:
641+
642+
.. code-block:: bash
643+
644+
keytool -v -list -keystore cloudstack-ldap-truststore.jks
645+
646+
3. Verify file permissions:
647+
648+
.. code-block:: bash
649+
650+
ls -l /etc/cloudstack/management/cloudstack-ldap-truststore.jks
651+
652+
Example output:
653+
654+
.. code-block:: text
655+
656+
-rw-r--r-- 1 root root 1332 <date> cloudstack-ldap-truststore.jks
657+
658+
Ensure that the CloudStack Management Server process has read access to the
659+
truststore file.
660+
661+
Distribute the Truststore
662+
663+
664+
If multiple CloudStack Management Servers are deployed:
665+
666+
* Copy the truststore file to **all management servers**
667+
* Ensure the **file path is identical** on each server
668+
* Ensure file permissions allow CloudStack to read the truststore
669+
670+
Example path:
671+
672+
::
673+
674+
/etc/cloudstack/management/cloudstack-ldap-truststore.jks
675+
676+
677+
678+
Restart CloudStack Management Services after updating the global settings.
679+
680+
681+
After updating the configuration, restart the CloudStack Management Server:
682+
683+
.. code-block:: bash
684+
685+
systemctl restart cloudstack-management
686+
687+
Notes
688+
689+
690+
* Configuration changes do not take effect until the management service is restarted.
691+
* Certificate renewal on the LDAP server requires repeating this procedure and
692+
redeploying the updated truststore.
693+
694+
570695

571696
Using a SAML 2.0 Identity Provider for User Authentication
572697
----------------------------------------------------------

0 commit comments

Comments
 (0)