FreeIPA installation bzw. der Versuch davon

Hier mein Vorgehen bei der Installation:

Installation

  1. create virtual mashine
  2. deploy virtual mashine
  3. vi /etc/hosts
    192.251.226.18  ipa.makerspace-gt.de ipa
    
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
  4. yum update -y
  5. yum install -y git ansible dnf
  6. git clone https://github.com/freeipa/ansible-freeipa.git
  7. cd ansible-freeipa/
  8. vi playbook.yml
    ---
    - hosts: localhost
      become: true
    
      roles:
        - role: ipaserver
          vars:
            ipaadmin_password: secret_ipaadmin_password
            ipadm_password: secret_ipadm_password
            ipaserver_domain: makerspace-gt.de
            ipaserver_realm: MAKERSPACE-GT.DE
            ipaserver_hostname: ipa.makerspace-gt.de
    
  9. ansible-playbook playbook.yml

soweit sogut

Ab diesem zeitpunkt läuft FreeIPA schon, jedoch bekomme ich eine Warnung bzgl. des SSL Zertifikats:

Fehler: Gesicherte Verbindung fehlgeschlagen

Beim Verbinden mit ipa.makerspace-gt.de trat ein Fehler auf. Sie haben ein ungültiges Zertifikat erhalten. Bitte kontaktieren Sie den Server-Administrator oder E-Mail-Korrespondenten und geben Sie diesen die folgenden Informationen: Ihr Zertifikat enthält die gleiche Seriennummer wie ein anderes Zertifikat dieser Zertifizierungsstelle. Bitte erwerben Sie ein neues Zertifikat mit einer eindeutigen Seriennummer. Fehlercode:
SEC_ERROR_REUSED_ISSUER_AND_SERIAL

  • Die Website kann nicht angezeigt werden, da die Authentizität der erhaltenen Daten nicht verifiziert werden konnte.
  • Kontaktieren Sie bitte den Inhaber der Website, um ihn über dieses Problem zu informieren.

Also mache ich weiter und versuche noch letsencrypt nachzurüsten

fortgeführte Installation

  1. cd
  2. git clone https://github.com/freeipa/freeipa-letsencrypt.git
  3. cd freeipa-letsencrypt/
  4. vi renew-le.sh
    #!/usr/bin/bash
    set -o nounset -o errexit
    
    WORKDIR=$(dirname "$(realpath $0)")
    EMAIL="info@makerspace-gt.de"
    
    ### cron
    # check that the cert will last at least 2 days from now to prevent too frequent renewal
    # comment out this line for the first run
    if [ "${1:-renew}" != "--first-time" ]
    then
            start_timestamp=`date +%s --date="$(openssl x509 -startdate -noout -in /var/lib/ipa/certs/httpd.crt | cut -d= -f2)"`
            now_timestamp=`date +%s`
            let diff=($now_timestamp-$start_timestamp)/86400
            if [ "$diff" -lt "2" ]; then
                    exit 0
            fi
    fi
    cd "$WORKDIR"
    # cert renewal is needed if we reached this line
    
    # cleanup
    rm -f "$WORKDIR"/*.pem
    rm -f "$WORKDIR"/httpd-csr.*
    
    # generate CSR
    openssl req -new -sha256 -config "$WORKDIR/ipa-httpd.cnf"  -key /var/lib/ipa/private/httpd.key -out "$WORKDIR/httpd-csr.der"
    
    # httpd process prevents letsencrypt from working, stop it
    service httpd stop
    
    # get a new cert
    letsencrypt certonly --standalone --csr "$WORKDIR/httpd-csr.der" --email "$EMAIL" --agree-tos
    
    # replace the cert
    cp /var/lib/ipa/certs/httpd.crt /var/lib/ipa/certs/httpd.crt.bkp
    mv -f "$WORKDIR/0000_cert.pem" /var/lib/ipa/certs/httpd.crt
    restorecon -v /var/lib/ipa/certs/httpd.crt
    
    # start httpd with the new cert
    service httpd start
    
  5. vi ipa-httpd.cnf
    # the fully qualified server (or service) name
    FQDN = ipa.makerspace-gt.de
    ALTNAMES = DNS:$FQDN
    
    # --- no modifications required below ---
    [ req ]
    default_bits = 2048
    default_md = sha256
    prompt = no
    encrypt_key = no
    distinguished_name = dn
    req_extensions = req_ext
    
    [ dn ]
    CN = $FQDN
    
    [ req_ext ]
    subjectAltName = $ALTNAMES
    
  6. kinit admin
  7. ./setup-le.sh

Probleme

Das setup-le.sh Skript endet mit der Meldung:

ipapython.admintool: INFO: The ipa-certupdate command was successful
Error opening Private Key /var/lib/ipa/private/httpd.key
140660381054864:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/var/lib/ipa/private/httpd.key','r')
140660381054864:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
unable to load Private Key

Und wie nicht anders zu erwarten ist die Datei /var/lib/ipa/private/httpd.key nicht vorhanden.

Nun heißt es recherchieren und dann den Fehler die Herausforderung zu meistern.

1 „Gefällt mir“

Neues Wochenende neues Spiel

heute richte ich mich nach der Anleitung von Computing for Geeks

https://vmbs.uk/t/how-to-install-freeipa-server-lets-encrypt-on-centos-7/69

  1. VM wird wie gehabt eingerichtet, nur diesmal ein CentOS 8 anstelle eines CentOS 7, 2 vCPUs und 4 gb RAM
  2. yum -y upgrade
  3. Hostname setzen
  • hostnamectl set-hostname ipa.makerspace-gt.de
  • echo "192.251.226.18 ipa.makerspace-gt.de ipa" | sudo tee -a /etc/hosts
  1. timedatectl set-timeone Europe/Berlin
  2. I had failed installation with SELinux in enforcing mode, I recommend you set it to permissive or disabled.

    • setenforce 0
    • sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
  3. Since this is FreeIPA Server installation, install DL1 stream and then freeipa-server.

    • yum -y install @idm:DL1
    • yum -y install freeipa-server
  4. Dann ist soweit alles vorbereitet und der Server wird konfiguriert
    • ipa-server-install
      The ipa-client-install command was successful
      
      Please add records in this file to your DNS system: /tmp/ipa.system.records.fr5e7ngf.db
      ==============================================================================
      Setup complete
      
      Next steps:
        1. You must make sure these network ports are open:
          TCP Ports:
            * 80, 443: HTTP/HTTPS
            * 389, 636: LDAP/LDAPS
            * 88, 464: kerberos
          UDP Ports:
            * 88, 464: kerberos
            * 123: ntp
      
        2. You can now obtain a kerberos ticket using the command: 'kinit admin'
          This ticket will allow you to use the IPA tools (e.g., ipa user-add)
          and the web user interface.
      
      Be sure to back up the CA certificates stored in /root/cacert.p12
      These files are required to create replicas. The password for these
      files is the Directory Manager password
      The ipa-server-install command was successful
      
  5. ich bekomme in Firefox immer noch die Warnung
    Fehler: Gesicherte Verbindung fehlgeschlagen
    
    Beim Verbinden mit ipa.makerspace-gt.de trat ein Fehler auf. Sie haben ein ungültiges Zertifikat erhalten. Bitte kontaktieren Sie den Server-Administrator oder E-Mail-Korrespondenten und geben Sie diesen die folgenden Informationen: Ihr Zertifikat enthält die gleiche Seriennummer wie ein anderes Zertifikat dieser Zertifizierungsstelle. Bitte erwerben Sie ein neues Zertifikat mit einer eindeutigen Seriennummer. Fehlercode:
    SEC_ERROR_REUSED_ISSUER_AND_SERIAL
    
    Die Website kann nicht angezeigt werden, da die Authentizität der erhaltenen Daten nicht verifiziert werden konnte.
    Kontaktieren Sie bitte den Inhaber der Website, um ihn über dieses Problem zu informieren.
    
  6. Ich versuche mich noch einmal an der Installtion von letsencrypt
  7. yum -y install git
  8. yum config-manager --set-enabled PowerTools
  9. cp -r /etc/httpd/alias /etc/httpd/alias_backup
  10. git clone https://github.com/freeipa/freeipa-letsencrypt.git
  11. cd freeipa-letsencrypt/
  12. vi renew-le.sh
    #!/usr/bin/bash
    set -o nounset -o errexit
    
    WORKDIR=$(dirname "$(realpath $0)")
    EMAIL="info@makerspace-gt.de"
    
    ### cron
    # check that the cert will last at least 2 days from now to prevent too frequent renewal
    # comment out this line for the first run
    if [ "${1:-renew}" != "--first-time" ]
    then
            start_timestamp=`date +%s --date="$(openssl x509 -startdate -noout -in /var/lib/ipa/certs/httpd.crt | cut -d= -f2)"`
            now_timestamp=`date +%s`
            let diff=($now_timestamp-$start_timestamp)/86400
            if [ "$diff" -lt "2" ]; then
                    exit 0
            fi
    fi
    cd "$WORKDIR"
    # cert renewal is needed if we reached this line
    
    # cleanup
    rm -f "$WORKDIR"/*.pem
    rm -f "$WORKDIR"/httpd-csr.*
    
    # generate CSR
    openssl req -new -sha256 -config "$WORKDIR/ipa-httpd.cnf"  -key /var/lib/ipa/private/httpd.key -out "$WORKDIR/httpd-csr.der"
    
    # httpd process prevents letsencrypt from working, stop it
    service httpd stop
    
    # get a new cert
    letsencrypt certonly --standalone --csr "$WORKDIR/httpd-csr.der" --email "$EMAIL" --agree-tos
    
    # replace the cert
    cp /var/lib/ipa/certs/httpd.crt /var/lib/ipa/certs/httpd.crt.bkp
    mv -f "$WORKDIR/0000_cert.pem" /var/lib/ipa/certs/httpd.crt
    restorecon -v /var/lib/ipa/certs/httpd.crt
    
    # start httpd with the new cert
    service httpd start
    
  13. vi ipa-httpd.cnf
    # the fully qualified server (or service) name
    FQDN = ipa.makerspace-gt.de
    ALTNAMES = DNS:$FQDN
    
    # --- no modifications required below ---
    [ req ]
    default_bits = 2048
    default_md = sha256
    prompt = no
    encrypt_key = no
    distinguished_name = dn
    req_extensions = req_ext
    
    [ dn ]
    CN = $FQDN
    
    [ req_ext ]
    subjectAltName = $ALTNAMES
    
  14. bash -x setup-le.sh
  15. Auf einmal soll ich ein Passwort eingeben
    + openssl req -new -sha256 -config /root/freeipa-letsencrypt/ipa-httpd.cnf -key /var/lib/ipa/private/httpd.key -out /root/freeipa-letsencrypt/httpd-csr.der
    Enter pass phrase for /var/lib/ipa/private/httpd.key:
    
  16. Der Fehler ist bekannt! Und zum Glück auch ein Workaround
  17. Danach läuft das Scipt weiter nur um dann mit einem anderen Fehler abzubrechen
    + letsencrypt certonly --standalone --csr /root/freeipa-letsencrypt/httpd-csr.der --email info@makerspace-gt.de --agree-tos
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator standalone, Installer None
    Performing the following challenges:
    http-01 challenge for ipa.makerspace-gt.de
    Waiting for verification...
    Cleaning up challenges
    An unexpected error occurred:
    Traceback (most recent call last):
      File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
        six.raise_from(e, None)
      File "<string>", line 3, in raise_from
      File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
        httplib_response = conn.getresponse()
      File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
        response.begin()
      File "/usr/lib64/python3.6/http/client.py", line 307, in begin
        version, status, reason = self._read_status()
      File "/usr/lib64/python3.6/http/client.py", line 268, in _read_status
        line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
      File "/usr/lib64/python3.6/socket.py", line 586, in readinto
        return self._sock.recv_into(b)
      File "/usr/lib64/python3.6/ssl.py", line 968, in recv_into
        return self.read(nbytes, buffer)
      File "/usr/lib64/python3.6/ssl.py", line 830, in read
        return self._sslobj.read(len, buffer)
      File "/usr/lib64/python3.6/ssl.py", line 587, in read
        v = self._sslobj.read(len, buffer)
    socket.timeout: The read operation timed out
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
        timeout=timeout
      File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
        _stacktrace=sys.exc_info()[2])
      File "/usr/lib/python3.6/site-packages/urllib3/util/retry.py", line 368, in increment
        raise six.reraise(type(error), error, _stacktrace)
      File "/usr/lib/python3.6/site-packages/urllib3/packages/six.py", line 693, in reraise
        raise value
      File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
        chunked=chunked)
      File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 386, in _make_request
        self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
      File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
        raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
    urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='acme-v02.api.letsencrypt.org', port=443): Read timed out. (read timeout=45)
    
    During handling of the above exception, another exception occurred:
    
    requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='acme-v02.api.letsencrypt.org', port=443): Read timed out. (read timeout=45)
    Please see the logfiles in /var/log/letsencrypt for more details.
    
  18. Etwas Recherche führt mich hierher
  19. ifconfig eth0 mtu 1300
  20. Dann noch einmal bash -x renew-le.sh --first-time
    IMPORTANT NOTES:
    - Congratulations! Your certificate and chain have been saved at:
      /root/freeipa-letsencrypt/0001_chain.pem
      Your cert will expire on 2020-08-14. To obtain a new or tweaked
      version of this certificate in the future, simply run certbot
      again. To non-interactively renew *all* of your certificates, run
      "certbot renew"
    - If you like Certbot, please consider supporting our work by:
    
      Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
      Donating to EFF:                    https://eff.org/donate-le
    
  21. Wir haben nun eine FreeIpa Instanz ipa.makerspace-gt.de :partying_face:

Wer hilft mit beim Einrichten der Benutzen? @CommanderRiker?

Der ipa Server hat sich verschluckt, da das renew immer nach dem Passwort vom httpd.key gefragt hat.
Das habe ich nun behoben:
ssh-keygen -p -P '3Tx!mPGH[2l-ms}}jtJ.InvG[6&w38K(.&I@(BuXf' -N "" -f /var/lib/ipa/private/httpd.key

Nun lässt sich der httpd.service nicht mehr starten…

[root@ipa ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/httpd.service.d
           └─ipa.conf
   Active: failed (Result: exit-code) since Thu 2020-05-21 06:36:27 UTC; 9s ago
     Docs: man:httpd.service(8)
  Process: 3393 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
  Process: 3390 ExecStartPre=/usr/libexec/ipa/ipa-httpd-kdcproxy (code=exited, status=0/SUCCESS)
 Main PID: 3393 (code=exited, status=1/FAILURE)
   Status: "Reading configuration..."

May 21 06:36:25 ipa.makerspace-gt.de systemd[1]: Starting The Apache HTTP Server...
May 21 06:36:26 ipa.makerspace-gt.de ipa-httpd-kdcproxy[3390]: ipa: INFO: KDC proxy enabled
May 21 06:36:26 ipa.makerspace-gt.de ipa-httpd-kdcproxy[3390]: ipa-httpd-kdcproxy: INFO     KDC proxy enabled
May 21 06:36:27 ipa.makerspace-gt.de systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
May 21 06:36:27 ipa.makerspace-gt.de systemd[1]: httpd.service: Failed with result 'exit-code'.
May 21 06:36:27 ipa.makerspace-gt.de systemd[1]: Failed to start The Apache HTTP Server.

Mit dem verschlüsselten key geht es wieder :frowning:

Unser ipaserver wird nun inkl. ipsilon (depracted) für SAML und letsencrypt via ansible aufgesetzt:
https://git.makerspace-gt.de/makerspace-gt/ansible/-/blob/restructure/provisioning/pb.ipa.yml

Ist noch nicht schön aufgebaut und momentan lauscht der server auf user.makerspace-gt.de anstelle von ipa.makerspace-gt.de da ich zu viele Zertifikate innerhalb einer Woche angefragt habe.