- apt: pkg: 'openssl' state: 'present' tags: - 'packages' - name: 'create slapd private key' shell: cmd: > openssl genpkey -algorithm ED25519 -out /etc/ldap/slapd.key creates: '/etc/ldap/slapd.key' tags: - 'tls_int' - name: 'set private key ownership' file: path: '/etc/ldap/slapd.key' owner: 'openldap' group: 'openldap' mode: '600' - name: 'update tls ca' copy: content: '{{ tls_root_ca }}' dest: '/etc/ldap/root_ca.crt' tags: - 'tls_int' - name: 'check slapd cert status' command: > openssl verify -CAfile /etc/ldap/root_ca.crt -untrusted /etc/ldap/slapd.crt /etc/ldap/slapd.crt register: slapd_cert_is_valid changed_when: false failed_when: false tags: - 'tls_int' - name: 'create slapd cert request' shell: cmd: > openssl req -new -subj "{{ x509_subject_prefix }}/OU=Server/CN={{ server_fqdn }}" -key /etc/ldap/slapd.key -out /etc/ldap/slapd.csr when: slapd_cert_is_valid.rc != 0 tags: - 'tls_int' - import_tasks: 'ca-signing-request.yaml' vars: host: '{{ server_fqdn }}' request_path: '/etc/ldap/slapd.csr' output_path: '/etc/ldap/slapd.crt' when: slapd_cert_is_valid.rc != 0 tags: - 'tls_int' # !BUG! Fixed in Ansible dev using ldap_attrs instead of ldap_attr # Setting the parameters twice in a row fix the problem. # Ref: https://github.com/ansible/ansible/issues/25665 # **ToDO: Find the right combination, is still failing at the first run # but works on the second iteration - name: 'configuring TLS options (workaround)' ldap_attr: dn: 'cn=config' name: '{{ item.name }}' values: '{{ item.value }}' loop: - { name: 'olcTLSCertificateFile', value: '/etc/ldap/slapd.crt' } - { name: 'olcTLSCertificateKeyFile', value: '/etc/ldap/slapd.key' } - { name: 'olcTLSCACertificateFile', value: '/etc/ldap/root_ca.crt' } failed_when: false tags: - 'tls_int' - name: 'configuring TLS options' ldap_attr: dn: 'cn=config' name: '{{ item.name }}' values: '{{ item.value }}' state: 'exact' loop: - { name: 'olcTLSCACertificateFile', value: '/etc/ldap/root_ca.crt' } - { name: 'olcTLSCertificateFile', value: '/etc/ldap/slapd.crt' } - { name: 'olcTLSCertificateKeyFile', value: '/etc/ldap/slapd.key' } - { name: 'olcTLSVerifyClient', value: 'try' } # TLS Client Auth - { name: 'olcTLSCipherSuite', value: 'SECURE:-VERS-ALL:+VERS-TLS1.3' } # TLSv1.3 Only tags: - 'tls_int' - name: 'configuring slapd service' lineinfile: line: 'SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"' regexp: '^SLAPD_SERVICES=' path: '/etc/default/slapd' notify: 'restart slapd' tags: - 'tls_int'