Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:ldap_c7:ldaps [15.07.2015 18:50. ] – [Schlüssel für das Serverzertifikat erzeugen] django | centos:ldap_c7:ldaps [18.11.2024 07:01. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== TLS-Absicherung des OpenLDAP-Servers - LDAPs-Konfiguration unter CentOS 7.x ====== | ====== TLS-Absicherung des OpenLDAP-Servers - LDAPs-Konfiguration unter CentOS 7.x ====== | ||
{{: | {{: | ||
+ | |||
{{ : | {{ : | ||
Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen. Daten durchlaufen von der Quelle bis zum Ziel zahlreiche Server und Systeme, an denen die Daten, abgegriffen und/oder manipuliert werden können und das nicht nur bei Übertragungen im Internet , sondern auch im **[[https:// | Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen. Daten durchlaufen von der Quelle bis zum Ziel zahlreiche Server und Systeme, an denen die Daten, abgegriffen und/oder manipuliert werden können und das nicht nur bei Übertragungen im Internet , sondern auch im **[[https:// | ||
Zeile 17: | Zeile 17: | ||
{{ : | {{ : | ||
- | Mit Hilfe von **[[centos:XXX?&#perfect_forward_secrecy|PFS]]**((**P**erfect **F**orward **S**ecrecy)) können wir leicht und einfach sicherstellen, | + | Mit Hilfe von **[[centos:ldap_c7: |
Perfect Forward Secrecy (PFS) basiert auf der Idee, dass Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt. Da der Verbindungsaufbau so gestrickt ist, daß der Schlüssel selbst gar nicht ausgetauscht werden muß, kann der jeweils benutzte Sitzungsschlüssel selbst auch nicht aufgezeichnet werden. Eine nachträgliche Entschlüsselung einer früher aufgezeichneten Session ist damit nicht mehr möglich. | Perfect Forward Secrecy (PFS) basiert auf der Idee, dass Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt. Da der Verbindungsaufbau so gestrickt ist, daß der Schlüssel selbst gar nicht ausgetauscht werden muß, kann der jeweils benutzte Sitzungsschlüssel selbst auch nicht aufgezeichnet werden. Eine nachträgliche Entschlüsselung einer früher aufgezeichneten Session ist damit nicht mehr möglich. | ||
Zeile 1092: | Zeile 1092: | ||
</ | </ | ||
- | ==== Certificate Signing Request erzeugen ==== | + | ===== Certificate Signing Request erzeugen |
Im folgenden Schritt zu unserem eigenen Zertifikat erzeugen wir einen **CSR**((**C**ertificate **S**igning **R**equest)), | Im folgenden Schritt zu unserem eigenen Zertifikat erzeugen wir einen **CSR**((**C**ertificate **S**igning **R**equest)), | ||
Zeile 1287: | Zeile 1287: | ||
Nutzen wir eine fremde oder kommerzielle CA, müssen wir unseren CSR meist in einem WEB-Formular einfügen oder hochladen. | Nutzen wir eine fremde oder kommerzielle CA, müssen wir unseren CSR meist in einem WEB-Formular einfügen oder hochladen. | ||
- | ==== Server-Zertifikat ==== | + | ===== Server-Zertifikat |
Als Ergebnis erhalten wir dann von unserer eigenen CA bzw. von der fremden CA unseres Vertrauns unser Serverzertifikat im gewünschten Format zurück. | Als Ergebnis erhalten wir dann von unserer eigenen CA bzw. von der fremden CA unseres Vertrauns unser Serverzertifikat im gewünschten Format zurück. | ||
< | < | ||
Zeile 1363: | Zeile 1363: | ||
-----END CERTIFICATE-----</ | -----END CERTIFICATE-----</ | ||
+ | ===== CA Trust ===== | ||
+ | {{page> | ||
+ | |||
+ | {{page> | ||
+ | |||
+ | ===== LDAPs konfigurieren ===== | ||
+ | Viele wertvolle Informationen zur TLS-Konfiguration finden sich im Kapitel **[[http:// | ||
+ | |||
+ | ==== slapd ==== | ||
+ | Damit unser OpenLDAP-Server zukünftig LDAPS auf Port **636** zur Verfügung stellen kann, bearbeiten wir nun die systemweite Konfigurationsdatei // | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # see 'man slapd' for additional information | ||
+ | |||
+ | # Where the server will run (-h option) | ||
+ | # - ldapi:/// is required for on-the-fly configuration using client tools | ||
+ | # (use SASL with EXTERNAL mechanism for authentication) | ||
+ | # - default: ldapi:/// ldap:/// | ||
+ | # - example: ldapi:/// ldap:// | ||
+ | # Django : 2015-07-15 - LDAPs Konfiguration für Port 636 | ||
+ | # default: SLAPD_URLS=" | ||
+ | SLAPD_URLS=" | ||
+ | |||
+ | # Any custom options | ||
+ | # | ||
+ | |||
+ | # Keytab location for GSSAPI Kerberos authentication | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | Nähere Informationen zu den möglichen Parametern entnehmen wir der zugehörigen Manpage. | ||
+ | # man slapd | ||
+ | |||
+ | < | ||
+ | |||
+ | NAME | ||
+ | slapd - Stand-alone LDAP Daemon | ||
+ | |||
+ | SYNOPSIS | ||
+ | | ||
+ | [-d debug-level] | ||
+ | [-n service-name] | ||
+ | [-r directory] [-u user] [-g group] [-c cookie] | ||
+ | |||
+ | DESCRIPTION | ||
+ | Slapd is the stand-alone LDAP daemon. It listens for LDAP connections on any number | ||
+ | | ||
+ | | ||
+ | | ||
+ | If configured in the config file (or config directory), the slapd process will print | ||
+ | | ||
+ | | ||
+ | | ||
+ | tty. | ||
+ | |||
+ | See the " | ||
+ | |||
+ | OPTIONS | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | -T tool | ||
+ | Run in Tool mode. The tool argument selects whether to run as slapadd, | ||
+ | cat, slapdn, slapindex, slappasswd, slapschema, or slaptest (slapacl and sla‐ | ||
+ | pauth need the entire acl and auth option value to be spelled out, as a is | ||
+ | reserved | ||
+ | it is used; any remaining options will be interpreted | ||
+ | slap tool program, | ||
+ | tool programs will usually be symbolic links to slapd. | ||
+ | vided for situations where symbolic links are not provided or not usable. | ||
+ | |||
+ | -d debug-level | ||
+ | Turn on debugging | ||
+ | even with a zero argument, slapd will not fork or disassociate | ||
+ | invoking | ||
+ | for any value of debug-level. | ||
+ | each bit corresponding | ||
+ | < | ||
+ | specified | ||
+ | tion. All the names recognized | ||
+ | slapd.conf(5) are supported. | ||
+ | levels is printed, and slapd exits. | ||
+ | |||
+ | Remember that if you turn on packet logging, packets | ||
+ | words will be output, | ||
+ | should be read-protected. | ||
+ | |||
+ | -s syslog-level | ||
+ | This option tells slapd at what debug-level debugging | ||
+ | logged | ||
+ | value or combination allowed by the -d switch. | ||
+ | selected by syslog-leveli at the syslog(3) severity debug-level DEBUG, on the | ||
+ | unit specified with -l. | ||
+ | |||
+ | -n service-name | ||
+ | Specifies the service name for logging and other purposes. | ||
+ | name of argv[0], i.e.: " | ||
+ | |||
+ | -l syslog-local-user | ||
+ | Selects | ||
+ | through LOCAL7, as well as USER and DAEMON. | ||
+ | this option | ||
+ | syslog(8) facility. | ||
+ | debug-level. | ||
+ | |||
+ | -f slapd-config-file | ||
+ | Specifies | ||
+ | dap/ | ||
+ | |||
+ | -F slapd-config-directory | ||
+ | Specifies the slapd configuration | ||
+ | dap/ | ||
+ | and converted to config directory format and written to the specified | ||
+ | tory. If neither option is specified, slapd will attempt to read the default | ||
+ | config directory before trying to use the default config | ||
+ | config | ||
+ | slap tools that use the config options observe this same behavior. | ||
+ | |||
+ | -h URLlist | ||
+ | slapd will by default serve ldap:/// (LDAP over TCP on all interfaces | ||
+ | default | ||
+ | The -h option may be used to specify LDAP (and other scheme) URLs to serve. | ||
+ | For | ||
+ | ldapi:///", | ||
+ | over TLS, and LDAP over IPC (Unix domain sockets). | ||
+ | INADDR_ANY (any interface). | ||
+ | URLs should be of the LDAP, LDAPS, or LDAPI schemes, and generally without a | ||
+ | DN or other optional parameters (excepting as discussed below). | ||
+ | the latter two schemes depends on selected configuration options. | ||
+ | be specified by name or IPv4 and IPv6 address formats. | ||
+ | must be numeric. | ||
+ | port is 636. | ||
+ | |||
+ | For LDAP over IPC, name is the name of the socket, and no port is required, | ||
+ | nor allowed; | ||
+ | other characters that are special to URLs; so the socket | ||
+ | |||
+ | / | ||
+ | |||
+ | must be specified as | ||
+ | |||
+ | ldapi:// | ||
+ | |||
+ | The default location for the IPC socket is / | ||
+ | |||
+ | The listener permissions are indicated by " | ||
+ | " | ||
+ | mission, while any of the " | ||
+ | chmod(1). | ||
+ | rough limitations to operations, | ||
+ | applies | ||
+ | delete, modify and modrdn), and execute operations (" | ||
+ | required). | ||
+ | apply to anonymous users; " | ||
+ | " | ||
+ | authenticated connections, | ||
+ | feature | ||
+ | time. | ||
+ | |||
+ | -r directory | ||
+ | Specifies a directory to become the root directory. | ||
+ | current working directory to this directory and then chroot(2) to this direc‐ | ||
+ | tory. This is done after opening listeners but before reading any configura‐ | ||
+ | tion file or initializing any backend. | ||
+ | should be used in conjunction with -u and -g options. | ||
+ | |||
+ | -u user | ||
+ | slapd will run slapd with the specified user name or id, and that user's sup‐ | ||
+ | plementary group access list as set with initgroups(3). | ||
+ | changed to this user's gid, unless the -g option is used to override. | ||
+ | when used with -r, slapd will use the user database in the change root envi‐ | ||
+ | ronment. | ||
+ | |||
+ | Note that on some systems, running as a non-privileged | ||
+ | passwd | ||
+ | shell back-ends will run as the specified non-privileged user. | ||
+ | |||
+ | -g group | ||
+ | slapd will run with the specified group name or id. Note when used with -r, | ||
+ | slapd will use the group database in the change root environment. | ||
+ | |||
+ | -c cookie | ||
+ | This option | ||
+ | cookie is a comma separated list of name=value | ||
+ | syncrepl | ||
+ | thread within the consumer server and is used to find the syncrepl specifica‐ | ||
+ | tion in slapd.conf(5) | ||
+ | identifier in its definition. The rid must be provided in order for any other | ||
+ | specified | ||
+ | mode configuration. | ||
+ | synchronization | ||
+ | which the syncrepl engine will synchronize to the current | ||
+ | In case of mirror-mode or multi-master replication agreement, multiple csn | ||
+ | values, semicolon separated, can appear. | ||
+ | full reload. | ||
+ | |||
+ | -o option[=value] | ||
+ | This option | ||
+ | reserve a separate letter for them. | ||
+ | |||
+ | It supports the following options: | ||
+ | |||
+ | slp={on|off|slp-attrs} | ||
+ | When SLP support is compiled into slapd, disable it (off), | ||
+ | enable it by registering at SLP DAs without specific | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | able. | ||
+ | |||
+ | EXAMPLES | ||
+ | | ||
+ | LDAP databases defined in the default config file, just type: | ||
+ | |||
+ | slapd | ||
+ | |||
+ | To start slapd with an alternate configuration file, and turn on voluminous | ||
+ | ging which will be printed on standard error, type: | ||
+ | |||
+ | slapd -f / | ||
+ | |||
+ | To test whether the configuration file is correct or not, type: | ||
+ | |||
+ | slapd -Tt | ||
+ | |||
+ | SEE ALSO | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | " | ||
+ | |||
+ | BUGS | ||
+ | See http:// | ||
+ | |||
+ | ACKNOWLEDGEMENTS | ||
+ | | ||
+ | < | ||
+ | gan LDAP 3.3 Release. | ||
+ | |||
+ | OpenLDAP 2.4.39 | ||
+ | |||
+ | ==== ldap.conf ==== | ||
+ | Wollen wir von unserem Server aus, mittels **ldapsearch** muss natürlich der Client auch wissen, wie er das bzw. die Zertifikate auf das Vertrauen hin prüfen soll. | ||
+ | |||
+ | Wir werden daher in der Konfigurationsdatei des LDAP-Clients vermerken, dass die im Abschnitt **[[centos: | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # LDAP Defaults | ||
+ | # | ||
+ | |||
+ | # See ldap.conf(5) for details | ||
+ | # This file should be world readable but not world writable. | ||
+ | |||
+ | #BASE | ||
+ | #URI ldap:// | ||
+ | |||
+ | # Django: 2015-07-14 | ||
+ | BASE dc=nausch, dc=org | ||
+ | # Anfragen werden unterhalb von dc=nausch, dc=org ausgeführt. | ||
+ | URI | ||
+ | |||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # Django : 2015-07-16 | ||
+ | # default: TLS_CACERTDIR | ||
+ | TLS_CACERTDIR | ||
+ | |||
+ | # Turning this off breaks GSSAPI used with krb5 when rdns = false | ||
+ | SASL_NOCANON | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== LDAPs-Konfiguration via LDIF ===== | ||
+ | ==== (TLS-)Zertifikate und Schlüssel === | ||
+ | Wie schon bei der **[[centos: | ||
+ | |||
+ | Folgende Parameter werden wir unserem OpenLDAP-Server über eine passende LDIF-Datei bekannt geben. | ||
+ | * **olcTLSCipherSuite**: | ||
+ | * **olcTLSCertificateFile**: | ||
+ | * **olcTLSCertificateKeyFile**: | ||
+ | * **olcTLSCACertificateFile**: | ||
+ | |||
+ | Zur Definition unserer TLS-Konfiguration legen wir uns nun eine passende zugehörige Datei an. | ||
+ | # vim / | ||
+ | |||
+ | <file ldif / | ||
+ | # TLS-Konfiguration unseres OpenLDAP-Servers. | ||
+ | # https:// | ||
+ | |||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | add: olcTLSCipherSuite | ||
+ | olcTLSCipherSuite: | ||
+ | - | ||
+ | replace: olcTLSCertificateFile | ||
+ | olcTLSCertificateFile: | ||
+ | - | ||
+ | replace: olcTLSCertificateKeyFile | ||
+ | olcTLSCertificateKeyFile: | ||
+ | - | ||
+ | add: olcTLSCACertificateFile | ||
+ | olcTLSCACertificateFile: | ||
+ | </ | ||
+ | |||
+ | Die Konfigurationsänderungen aktivieren wir wieder wie gehabt mit Aufruf des Befehls **ldapmodify**. | ||
+ | # ldapmodify -Y EXTERNAL -H ldapi:/// -f / | ||
+ | |||
+ | SASL/ | ||
+ | SASL username: gidNumber=0+uidNumber=0, | ||
+ | SASL SSF: 0 | ||
+ | modifying entry " | ||
+ | |||
+ | Ob unsere Änderungen entsprechend unserer ldif-Datei angelegt und geändert wurden, können wir wie folgt überprüfen. | ||
+ | # | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=olcGlobal) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # config | ||
+ | dn: cn=config | ||
+ | objectClass: | ||
+ | cn: config | ||
+ | olcArgsFile: | ||
+ | olcPidFile: / | ||
+ | olcTLSCACertificatePath: | ||
+ | olcReferral: | ||
+ | olcIdleTimeout: | ||
+ | olcTLSCipherSuite: | ||
+ | olcTLSCertificateFile: | ||
+ | olcTLSCertificateKeyFile: | ||
+ | olcTLSCACertificateFile: | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1 | ||
+ | </ | ||
+ | |||
+ | Damit unser OpenLDAP-Daemon **slapd** den TCP-Port **636** (LDAP over SSL) binden kann, müssen wir diesen einmal durchstarten. | ||
+ | # systemctl restart slapd.service | ||
+ | |||
+ | Den erfolgreichen restart können wir bei Bedarf natürlich auch abfragen. | ||
+ | # systemctl status slapd.service | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | | ||
+ | | ||
+ | Docs: man:slapd | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Process: 20954 ExecStart=/ | ||
+ | Process: 20924 ExecStartPre=/ | ||
+ | Main PID: 20956 (slapd) | ||
+ | | ||
+ | | ||
+ | |||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20945]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20945]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20947]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20947]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20949]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20949]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20951]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org runuser[20951]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org slapd[20954]: | ||
+ | | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org slapd[20956]: | ||
+ | Jul 15 22:51:49 vml000037.dmz.nausch.org systemd[1]: Started OpenLDAP Server Daemon.</ | ||
+ | </ | ||
+ | |||
+ | Den geöffneten Port **636** können wir auch mit folgendem Aufruf überprüfen: | ||
+ | # lsof -i :636 | ||
+ | |||
+ | COMMAND | ||
+ | slapd 20956 ldap | ||
+ | slapd 20956 ldap | ||
+ | |||
+ | An statt **lsof** zu nutzen, können wir natürlich auch den Befehl **netstat** dazu bemühen. | ||
+ | # | ||
+ | |||
+ | tcp 0 0 0.0.0.0: | ||
+ | tcp 0 0 0.0.0.0: | ||
+ | tcp6 | ||
+ | tcp6 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== TLS Protokollversion ==== | ||
+ | Auf Grund einer Sicherheitslücke in der **SSLv3** Implementierung (**Poodle-Lücke**), | ||
+ | |||
+ | Die Festlegung des TLS Protokolls bzw. dem Ausschluss von **SSLv3** nehmen wir an Hand der nachfolgenden ldif-Datei vor. | ||
+ | # vim / | ||
+ | |||
+ | <file ldif / | ||
+ | # Ausschliessen der TLS-Protokolls SSLv3 auf Grund der Poodle Lücke | ||
+ | # https:// | ||
+ | |||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | add: olcTLSProtocolMin | ||
+ | olcTLSProtocolMin: | ||
+ | |||
+ | </ | ||
+ | |||
+ | Mittels **ldapmodify** führen wir nun die Änderungen unserer ldif-Datei aus. | ||
+ | # ldapmodify -W -x -D cn=config -f / | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | |||
+ | modifying entry " | ||
+ | |||
+ | Ob unsere Änderungen auch wirklich entsprechend unserer ldif-Datei angelegt und geändert wurden, können wir wie folgt überprüfen. | ||
+ | # | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=olcGlobal) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # config | ||
+ | dn: cn=config | ||
+ | objectClass: | ||
+ | cn: config | ||
+ | olcArgsFile: | ||
+ | olcIdleTimeout: | ||
+ | olcPidFile: / | ||
+ | olcReferral: | ||
+ | olcTLSCACertificateFile: | ||
+ | olcTLSCACertificatePath: | ||
+ | olcTLSCertificateFile: | ||
+ | pem | ||
+ | olcTLSCertificateKeyFile: | ||
+ | olcTLSCipherSuite: | ||
+ | olcTLSProtocolMin: | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1</ | ||
+ | |||
+ | ==== TLS Diffie-Hellman Parameter ==== | ||
+ | Will man **Perfect Forward Secrecy** benutzen, so ist laut der " | ||
+ | |||
+ | Zunächst werden wir uns nun erst einmal eine zu unserem **4096-RSA-Key** passende Diffie-Hellmann-Schlüsselparameterdatei generieren. | ||
+ | |||
+ | <WRAP center round tip 85%> | ||
+ | Die Erstellung einer 4096 Diffie-Hellman-Parameterdatei wird einige Zeit in Anspruch nehmen, also genügend Zeit für ein paar Kaffee oder [[http:// | ||
+ | </ | ||
+ | |||
+ | # openssl dhparam -out / | ||
+ | |||
+ | < | ||
+ | ...............................+............+..............</ | ||
+ | |||
+ | Da wir die Diffie-Hellman-Parameterdatei im Betrieb regelmäßig austauschen wollen, legen wir uns kurzer Hand einfach ein passendes Shell-Script an. Zuvor legen wir aber noch ein Verzeichnis an, in dem die Schlüssel vorübergehend abgelegt werden können. | ||
+ | # mkdir / | ||
+ | |||
+ | # vim edh_keygen | ||
+ | <file bash edh_keygen># | ||
+ | # Script zum Erstellen der Diffie Hellman Schlüsselparameterdatei | ||
+ | # Django < | ||
+ | |||
+ | # ins Arbeitsverzeichnis wechseln | ||
+ | cd / | ||
+ | umask 022 | ||
+ | |||
+ | # Diffie-Hellman Parameter Datei erzeugen | ||
+ | openssl dhparam -out dh_4096.pem 4096 | ||
+ | chmod 640 dh_4096.pem | ||
+ | |||
+ | # Hostname und Datum holen | ||
+ | NAME=`hostname -s` | ||
+ | DATUM=`date +'%b %e %H: | ||
+ | |||
+ | # Parameterdatei für OpenLDAP bereitstellen | ||
+ | / | ||
+ | |||
+ | # Informationen zur neuen Parameterdatei im OPenLDAP-Log vermerken | ||
+ | echo " | ||
+ | |||
+ | # OpenLDAP-Server restarten | ||
+ | / | ||
+ | |||
+ | # Temporäre Arbeitsdatei schreddern | ||
+ | / | ||
+ | |||
+ | Damit das Script auch ausgeführt werdden kann, versehen wir es noch mit den benötigten Rechten. | ||
+ | # chmod +x edh_keygen | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | Warum das ganze in ein Shellsript packen, wird nun sich der ein oder andere gefragt haben. Ganz einfach: Wenn wir das Script nun nach **/// | ||
+ | </ | ||
+ | # mv edh_keygen / | ||
+ | |||
+ | Das regelmäßige Erneuern der DH-Parameterdatei erfolgt nun regelmäßig und wir im Log unseres OpenLDAP-Verzeichnisservers entsprechend dokumentiert. | ||
+ | |||
+ | # less / | ||
+ | |||
+ | < | ||
+ | Jul 16 14:43:38 vml000037 slapd[5002]: | ||
+ | Jul 16 14:43:38 vml000037 slapd[5002]: | ||
+ | Jul 16 14:43:38 vml000037 slapd[5002]: | ||
+ | Jul 16 14:43:39 vml000037 slapd[7344]: | ||
+ | mockbuild@worker1.bsys.centos.org:/ | ||
+ | Jul 16 14:43:39 vml000037 slapd[7346]: | ||
+ | |||
+ | Nun müssen wir nur noch über die Directive **olcTLSDHParamFile** unserem OpenLDAP-Server beibringen, die Parameterdatei auch zu verwenden. | ||
+ | |||
+ | Wir legen uns also eine passende Konfigurationsdatei an und weisem dem Parameter dem Wert //****// zu. | ||
+ | # vim / | ||
+ | |||
+ | <file ldif / | ||
+ | # Definition der Parameterdatei für den Diffie-Hellman Ephemeral Schlüssel Austausch | ||
+ | # https:// | ||
+ | |||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | replace: olcTLSDHParamFile | ||
+ | olcTLSDHParamFile: | ||
+ | </ | ||
+ | |||
+ | Die Änderung unserer OpenLDAP-Konfiguration, | ||
+ | # ldapmodify -W -x -D cn=config -f / | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | |||
+ | modifying entry " | ||
+ | |||
+ | Auch hier können wir überprüfen, | ||
+ | # ldapsearch -W -x -D cn=config -b cn=config " | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | < | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=olcGlobal) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # config | ||
+ | dn: cn=config | ||
+ | objectClass: | ||
+ | cn: config | ||
+ | olcArgsFile: | ||
+ | olcIdleTimeout: | ||
+ | olcPidFile: / | ||
+ | olcReferral: | ||
+ | olcTimeLimit: | ||
+ | olcTLSCACertificateFile: | ||
+ | olcTLSCACertificatePath: | ||
+ | olcTLSCertificateFile: | ||
+ | pem | ||
+ | olcTLSCertificateKeyFile: | ||
+ | olcTLSCipherSuite: | ||
+ | olcTLSProtocolMin: | ||
+ | olcTLSDHParamFile: | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1 | ||
+ | </ | ||
+ | |||
+ | ===== LDAPs Verbindungstests ===== | ||
+ | |||
+ | ==== openssl ==== | ||
+ | Beim ersten Test bauen wir eine Verbindung mit Hilfe des Befehls **openssl** auf und prüfen, ob auch wirklich das angegebene Protokoll verwendet wurde und welcher **Cipher** zum Einsatz kam. | ||
+ | # openssl s_client -connect openldap.dmz.nausch.org: | ||
+ | |||
+ | < | ||
+ | depth=2 O = Root CA, OU = http:// | ||
+ | verify return: | ||
+ | depth=1 O = CAcert Inc., OU = http:// | ||
+ | verify return: | ||
+ | depth=0 CN = openldap.dmz.nausch.org | ||
+ | verify return: | ||
+ | --- | ||
+ | Certificate chain | ||
+ | 0 s:/ | ||
+ | | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIGBzCCA++gAwIBAgIDAm8BMA0GCSqGSIb3DQEBDQUAMFQxFDASBgNVBAoTC0NB | ||
+ | Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV | ||
+ | BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTUwNzE1MTgzOTUxWhcNMTcwNzE0 | ||
+ | MTgzOTUxWjAiMSAwHgYDVQQDExdvcGVubGRhcC5kbXoubmF1c2NoLm9yZzCCAiIw | ||
+ | DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMUdsfKPIpr3Ma0gpTJdIdKFJ9Wj | ||
+ | oc7tRO5D67WgXm4Txwd17wK51BkCsXPc7tNHHTTfEJ17UPfqge4bH5kH+Vfg4dAb | ||
+ | DG0xDtcJibQ0k4dbZEidTET41Iqd2m6xgGOAfEOpZmSUA2Awn4GBKFHjg3RzZ6YG | ||
+ | n6CTCTaCGiRsRWiGq0KBk4lXmvfAy+/ | ||
+ | yMuqMWOO+e3YcUauZVhqhKlcH2AWi8+V6j4wp2G72fuuxOpZkU2vJcNKH3sHYj9G | ||
+ | p+Z7VHmzgDlz7Y00f93M6VVnC91RhDBwgQzGDMNRTSLyEnOFw7rtHgB/ | ||
+ | 9kley/ | ||
+ | sPvsPt/ | ||
+ | GW0uJtWpNcvfx0FIPyFfDUAcCLiBnXym+4E4ekXEHH9aZxLgNhX81dw9lBzAmv1I | ||
+ | AAt2TMbwk74WedYVPN0nToGkTJu3iv1Y6sKQrbClpp4xl43bl11WFHFvJI0o7CC8 | ||
+ | 265NiAYfXztTXqxlJEOoltTaAXh9Zo8qNagrzlGOM/ | ||
+ | +Z3YzIuTtz6gCHwPAgMBAAGjggESMIIBDjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB | ||
+ | / | ||
+ | AQYKKwYBBAGCNwoDAzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 | ||
+ | Ly9vY3NwLmNhY2VydC5vcmcvMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9jcmwu | ||
+ | Y2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDBJBgNVHREEQjBAghdvcGVubGRh | ||
+ | cC5kbXoubmF1c2NoLm9yZ6AlBggrBgEFBQcIBaAZDBdvcGVubGRhcC5kbXoubmF1 | ||
+ | c2NoLm9yZzANBgkqhkiG9w0BAQ0FAAOCAgEAQpFKrP2/ | ||
+ | qoWhRMZM/ | ||
+ | dVJysG+VbCh9YD5poHRVPMC5zAHWQ13m4BhaOcSXu1Vvh7lb/ | ||
+ | eyY28nTD1fLjTMfp6PbYFTK+asxq0TPqrP9j0qSy1M+0SQnLvlLkr1/ | ||
+ | L5c7FlTQAYE0q6sTdpAPNX2icGHECtylCohlnpNoLCchboH9y9s7FtPzMbDENWvA | ||
+ | FM1gooanqbo66adN7psnw2gXJbDLShaIwgjRzM8+82I4nXVO5CcD3FWqQIPwYpec | ||
+ | Rqk/ | ||
+ | LBvmGZedITZ3+NqmJTbSp3R4bEYESmznNUdD8BnBvg3alkzjb6Cinnb30TJtehbQ | ||
+ | yBaEhzq8KsOZpzcLT7ldN3Y6dxu8qj+p67nGD+A8brrII1s4TIcnEvnPBCWuku/ | ||
+ | a5iSsSt3US1dOocFJM3CJyuaNfWIqDbutE702fREPriNPxqRSdTkH5Ub4Rb4CiRW | ||
+ | bHHSqh0QekUMpNi6n7+thG46EKJk1WgeNhhsqRKqy5MDLth7iN5gHE2CCbSIe4qW | ||
+ | g2KkrggW2eBNzv4= | ||
+ | -----END CERTIFICATE----- | ||
+ | 1 s:/O=CAcert Inc./ | ||
+ | | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv | ||
+ | b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ | ||
+ | Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y | ||
+ | dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU | ||
+ | MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0 | ||
+ | Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN | ||
+ | AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a | ||
+ | iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/ | ||
+ | aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C | ||
+ | jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/ | ||
+ | pNkVGJGmhZJHsK5I6223IeyFGmhyNav/ | ||
+ | FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt | ||
+ | XapI19V91Cp7XPpGBFDkzA5CW4zt2/ | ||
+ | oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6 | ||
+ | R9Wb7yQocDggL9V/ | ||
+ | rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/ | ||
+ | LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/ | ||
+ | BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/ | ||
+ | gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV | ||
+ | BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG | ||
+ | A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS | ||
+ | c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/ | ||
+ | AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr | ||
+ | BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB | ||
+ | MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y | ||
+ | Zy9pbmRleC5waHA/ | ||
+ | ZXJ0Lm9yZy9pbmRleC5waHA/ | ||
+ | b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D | ||
+ | QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/ | ||
+ | 7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH | ||
+ | Va9Y/ | ||
+ | D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3 | ||
+ | VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a | ||
+ | lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW | ||
+ | Q7fDCo1y/ | ||
+ | hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/ | ||
+ | 0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn | ||
+ | ebJSoMbxhbQljPI/ | ||
+ | d+pLncdBu8fA46A/ | ||
+ | 4GGSt/ | ||
+ | -----END CERTIFICATE----- | ||
+ | 2 s:/O=Root CA/ | ||
+ | | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 | ||
+ | IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB | ||
+ | IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA | ||
+ | Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO | ||
+ | BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi | ||
+ | MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ | ||
+ | ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC | ||
+ | CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ | ||
+ | 8BLPRoZzYLdufujAWGSuzbCtRRcMY/ | ||
+ | zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y | ||
+ | fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7 | ||
+ | w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc | ||
+ | G8Y0f3/ | ||
+ | epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/ | ||
+ | laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/ | ||
+ | QUxPKZgh/ | ||
+ | fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826 | ||
+ | YreQQejdIOQpvGQpQsgi3Hia/ | ||
+ | ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY | ||
+ | gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe | ||
+ | MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0 | ||
+ | IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy | ||
+ | dC5vcmeCAQAwDwYDVR0TAQH/ | ||
+ | czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0 | ||
+ | dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl | ||
+ | aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC | ||
+ | AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg | ||
+ | b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB | ||
+ | ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc | ||
+ | nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg | ||
+ | 18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/ | ||
+ | gr/ | ||
+ | Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY | ||
+ | sONvRUgzEv/ | ||
+ | SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/ | ||
+ | CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/ | ||
+ | GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk | ||
+ | zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/ | ||
+ | omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD | ||
+ | -----END CERTIFICATE----- | ||
+ | --- | ||
+ | Server certificate | ||
+ | subject=/ | ||
+ | issuer=/ | ||
+ | --- | ||
+ | No client certificate CA names sent | ||
+ | Server Temp Key: ECDH, prime256v1, 256 bits | ||
+ | --- | ||
+ | SSL handshake has read 6065 bytes and written 399 bytes | ||
+ | --- | ||
+ | New, TLSv1/ | ||
+ | Server public key is 4096 bit | ||
+ | Secure Renegotiation IS supported | ||
+ | Compression: | ||
+ | Expansion: NONE | ||
+ | SSL-Session: | ||
+ | Protocol | ||
+ | Cipher | ||
+ | Session-ID: 1CB2A6EEF8A21B2239B011CFA0FF156F76A477FE8F883550762FDB0B2DACDBEC | ||
+ | Session-ID-ctx: | ||
+ | Master-Key: FFA99DDC9829B6171367B7428647D13F6D7BFA65582810158A10CEDF8B38C2295A4E6C3F8B3212672EC1974DCD1DDAB3 | ||
+ | Key-Arg | ||
+ | Krb5 Principal: None | ||
+ | PSK identity: None | ||
+ | PSK identity hint: None | ||
+ | Start Time: 1437051157 | ||
+ | Timeout | ||
+ | Verify return code: 0 (ok) | ||
+ | ---</ | ||
+ | |||
+ | Mit der Tastenkombination **Strg + c** beenden wir die Verbindung. | ||
+ | |||
+ | Im obigen Beispiel sehen wir, dass: | ||
+ | * **Protokoll**: | ||
+ | * **Cipher** | ||
+ | und als temporärer Server-Key **ECDH, prime256v1, 256 bits** verwendet wurden. | ||
+ | |||
+ | In der Logdatei unseres OpenLDAP-Servers wird der Connect entsprechend vermerkt. | ||
+ | # less / | ||
+ | |||
+ | Jul 16 14:53:37 vml000037 slapd[7346]: | ||
+ | Jul 16 14:53:37 vml000037 slapd[7346]: | ||
+ | Jul 16 14:53:45 vml000037 slapd[7346]: | ||
+ | |||
+ | ==== ldapsearch ==== | ||
+ | Beim nächsten Test verwenden wir den Befehl **ldapsearch** und richten über eine geschützte TLS-Verbindung eine Anfrage an unseren OpenLDAP-Verzeichnisdienst. | ||
+ | # ldapsearch -W -x -D cn=config -b cn=config " | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | |||
+ | < | ||
+ | objectClass: | ||
+ | cn: config | ||
+ | olcArgsFile: | ||
+ | olcIdleTimeout: | ||
+ | olcPidFile: / | ||
+ | olcReferral: | ||
+ | olcTimeLimit: | ||
+ | olcTLSCACertificateFile: | ||
+ | olcTLSCACertificatePath: | ||
+ | olcTLSCertificateFile: | ||
+ | olcTLSCertificateKeyFile: | ||
+ | olcTLSCipherSuite: | ||
+ | olcTLSDHParamFile: | ||
+ | olcTLSProtocolMin: | ||
+ | </ | ||
+ | |||
+ | Der Verbindungsauf- wie auch -abbau und natürlich auch die Abfrage an sich, wird im LDAP-Log // | ||
+ | # less / | ||
+ | < | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | Jul 16 15:49:32 vml000037 slapd[11436]: | ||
+ | ====== Links ====== | ||
+ | * **⇐ [[centos: | ||
+ | * **⇒ [[centos: | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
- | FIXME |