Bootstrap-play voor PHX-domein

Stapsgewijze handleiding voor het uitvoeren van de bootstrap-play om veilige WinRM HTTPS in een gesimuleerde PHX-domeinomgeving te configureren, inclusief beoordeling van certificaten, uitvoering en verificatie voor Ansible-automatisering op Windows-hosts.

Projects:  c2platform/phx/ansible ,  c2platform.wincore


Overzicht

In het PHX-domein zijn Windows-hosts niet onmiddellijk voorbereid op Ansible automatisering. Standaard is alleen WinRM over HTTP geconfigureerd, wat Ansible kan gebruiken in combinatie met Kerberos voor authenticatie. Hoewel deze setup enige beveiliging biedt via Kerberos, worden inloggegevens onversleuteld over het netwerk verzonden, wat mogelijke risico’s met zich meebrengt in bepaalde scenario’s.

Om de beveiliging te verbeteren, configureert de bootstrap-play WinRM over HTTPS met de aangepaste module c2platform.wincore.winrm_https_config. Dit maakt het mogelijk voor volgende Ansible-plays om veilig via HTTPS te verbinden.

De bootstrap-play in het PHX-domein omvat aanvullende taken naast de WinRM-configuratie. In de open-source PHX-referentie-implementatie (PXD ontwikkelomgeving) richt deze zich echter momenteel alleen op het beheren van WinRM HTTPS.

In de PXD ontwikkelomgeving gebruikt Vagrant standaard WinRM HTTPS, dus het simuleert niet volledig de initiële setup met alleen HTTP in het PHX-domein. Om het configuratieproces van WinRM HTTPS te testen en te simuleren, gebruiken we de node pxd-ubuntu-devtop als domeingebruiker tony. Deze gebruiker gebruikt standaard SSH voor Ansible-verbindingen, wat het mogelijk maakt om de WinRM HTTPS-setup te beheren (bijv. wijzigen of verwijderen) via SSH en vervolgens de functionaliteit van de module te verifiëren door over te schakelen naar WinRM.

Deze handleiding biedt een stapsgewijs proces om de bootstrap-play uit te voeren en te verifiëren, waarbij veilige Ansible-operaties in een gesimuleerde PHX-achtige omgeving worden gewaarborgd.

Randvoorwaarden

Voordat je begint, zorg ervoor dat je het volgende hebt voltooid:

Stap 1: Inloggen als Tony

Verbind met het ontwikkel-desktop:

vagrant ssh pxd-ubuntu-devtop

Schakel over naar gebruiker tony:

sudo su - tony

Creëer een forwardable TGT (Ticket-Granting Ticket) voor Kerberos-authenticatie. Dit maakt het mogelijk om het ticket door te geven aan andere services of hosts, waardoor naadloze multi-hop authenticatie mogelijk is zonder opnieuw inloggegevens in te voeren:

echo 'Supersecret!' | kinit -f

Verifieer het ticket met klist om te bevestigen dat het forwardable is (kijk naar de “forwardable”-vlag).

Stap 2: Opslaan en beoordelen van huidig certificaat

Voordat je de bootstrap-play uitvoert en de WinRM HTTPS-configuratie vervangt, sla het TLS/SSL-certificaat op en beoordeel het. Dit maakt het mogelijk om te verifiëren dat de module het certificaat daadwerkelijk vervangt door een nieuw exemplaar.

Open een ander terminal op je hostmachine en verbind als gebruiker vagrant met de node pxd-ubuntu-devtop:

phx
vagrant ssh pxd-ubuntu-devtop

Sla het certificaat op in een bestand:

echo -n | openssl s_client -connect pxd-win1.c2.org:5986 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /vagrant/winrm.pem

Beoordeel de certificaatdetails, inclusief subject, issuer, geldigheidsdata, subject alternative names en SHA-256-fingerprint:

echo -n | openssl s_client -connect pxd-win1.c2.org:5986 -servername pxd-win1.c2.org 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName -fingerprint -sha256

Deze opdracht verbindt met het WinRM HTTPS-eindpunt, extraheert het certificaat en toont belangrijke metadata zonder het volledige certificaat op te slaan. De output ziet er ongeveer zo uit (werkelijke waarden kunnen variëren):

subject=CN = WIN-EI2VV283LJN
issuer=CN = WIN-EI2VV283LJN
notBefore=Sep  4 05:52:57 2023 GMT
notAfter=Sep  3 05:52:57 2026 GMT
X509v3 Subject Alternative Name:
    DNS:WIN-EI2VV283LJN, DNS:WIN-EI2VV283LJN
sha256 Fingerprint=FD:26:43:A2:4B:36:FB:5D:8F:E9:F6:94:30:A9:A6:E1:AE:01:F6:F5:3F:F6:8A:DB:D3:A7:03:48:93:BE:5C:59

Noteer de fingerprint en data voor vergelijking na het uitvoeren van de bootstrap-play.

Stap 3: Uitvoeren van bootstrap-play

Gebruiker tony gebruikt een aangepaste inventaris via de omgevingsvariabele ANSIBLE_INVENTORY, die standaard SSH-verbindingen gebruikt. Voor meer details, zie:

Activeer de Python virtuele omgeving (die Ansible bevat) en navigeer naar de inventaris projectmap:

phx

Stel het Ansible Vault-wachtwoordbestand in:

export ANSIBLE_VAULT_PASSWORD_FILE=/usr/local/bin/vault-client.sh

Voer de bootstrap-play uit. Dit zou de WinRM HTTPS taak als “changed” moeten tonen, wat aangeeft dat de standaard WinRM HTTPS-configuratie van de Vagrant-box is gewijzigd:

ansible-playbook plays/mgmt/bootstrap.yml
Toon output
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ ansible-playbook plays/mgmt/bootstrap.yml
ini_path: /home/tony@c2.org/git/gitlab/c2/ansible-phx/hosts.ini

PLAY [Windows] ***************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************
ok: [pxd-win1]

TASK [WinRM HTTPS] ***********************************************************************************************************
changed: [pxd-win1]

PLAY RECAP *******************************************************************************************************************
pxd-win1                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Stap 4: Verificatie van WinRM HTTPS-configuratie

Om WinRM HTTPS te testen, schakel over naar een Kerberos-ingeschakelde WinRM inventaris:

export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini,hosts-kerberos-override.ini,hosts-kerberos-winrm-override.ini"

Voer de bootstrap-play opnieuw uit. De WinRM HTTPS taak zou nu als “ok” moeten worden getoond (niet veranderd), wat bevestigt dat de configuratie al aanwezig is:

ansible-playbook plays/mgmt/bootstrap.yml

Om te bevestigen dat WinRM wordt gebruikt, voer uit met verbose output en controleer op WinRM-verbindingen:

ansible-playbook plays/mgmt/bootstrap.yml -vvv | grep WINRM
Toon output
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ ansible-playbook plays/mgmt/bootstrap.yml
ini_path: /home/tony@c2.org/git/gitlab/c2/ansible-phx/hosts.ini

PLAY [Windows] ***************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************
ok: [pxd-win1]

TASK [WinRM HTTPS] ***********************************************************************************************************
ok: [pxd-win1]

PLAY RECAP *******************************************************************************************************************
pxd-win1                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ ansible-playbook plays/mgmt/bootstrap.yml -vvv | grep WINRM
<pxd-win1.c2.org> ESTABLISH WINRM CONNECTION FOR USER:  on PORT 5986 TO pxd-win1.c2.org
<pxd-win1.c2.org> ESTABLISH WINRM CONNECTION FOR USER:  on PORT 5986 TO pxd-win1.c2.org

Deze verificatie zorgt ervoor dat de WinRM HTTPS-setup functioneel en veilig is voor Ansible-operaties.

Review

Bootstrap playbook

 plays/mgmt/bootstrap.yml

---
- name: Windows
  hosts: pxd-win1

  tasks:
    - name: WinRM HTTPS
      c2platform.wincore.winrm_https_config:
        computer_name: "{{ inventory_hostname }}"
        dns_name: "{{ inventory_hostname }}.c2.org"
        state: present

 plugins/modules/winrm_https_config.ps1

Review nieuw/gewijzigd certificaat

Na het uitvoeren van de bootstrap-play, beoordeel het nieuwe certificaat om te bevestigen dat het is bijgewerkt. Als gebruiker vagrant op pxd-ubuntu-devtop, sla het nieuwe certificaat op:

echo -n | openssl s_client -connect pxd-win1.c2.org:5986 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /vagrant/winrm-new.pem

Vergelijk het met het oorspronkelijke opgeslagen certificaat indien nodig (bijv. met diff /vagrant/winrm.pem /vagrant/winrm-new.pem).

Beoordeel de details van het nieuwe certificaat:

echo -n | openssl s_client -connect pxd-win1.c2.org:5986 -servername pxd-win1.c2.org 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName -fingerprint -sha256

Vergelijk de output met het oorspronkelijke uit Stap 2. Kijk naar wijzigingen in de fingerprint, data of andere details die aangeven dat een nieuw certificaat is gegenereerd en toegepast.

Review WinRM-listeners

Daarnaast, op de Windows-host (pxd-win1), gebruik PowerShell om de WinRM-listeners op te sommen en te verifiëren dat de HTTPS-listener actief is met de nieuwe certificaat-thumbprint:

winrm enumerate winrm/config/listener

Voorbeeldoutput (werkelijke thumbprint en details zullen variëren):

Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.61.12, ::1, fe80::6d9c:c6e5:e15e:a485%4, fe80::e861:af06:658a:d7a7%7

Listener
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = 6DCA065A5A29EFAD9BF136828270558324340BC1
    ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.61.12, ::1, fe80::6d9c:c6e5:e15e:a485%4, fe80::e861:af06:658a:d7a7%7

Dit bevestigt dat de HTTPS-listener is geconfigureerd met het nieuwe certificaat.

Aanvullende opmerkingen

  • De bootstrap-play is cruciaal voor de overgang van onveilige HTTP naar veilige HTTPS WinRM in productie-achtige omgevingen.
  • In echte PHX-domeinen kunnen aanvullende taken certificaatbeheer, firewall-aanpassingen of integratie met enterprise CA’s omvatten.
  • Voor troubleshooting, controleer de WinRM-listenerstatus op de Windows-host met winrm enumerate winrm/config/listener via PowerShell.
  • Behandel Kerberos-tickets altijd veilig om ongeautoriseerde toegang te voorkomen.

Laatst gewijzigd 2026.05.13: phx bootstrap play PHX-616 (8e2d10c)