Security Token Service (servizio token di sicurezza, STS) di vCenter Server è un servizio Web che genera, convalida e rinnova i token di sicurezza.
In qualità di emittente di token, STS utilizza una chiave privata per firmare i token e pubblica i certificati pubblici affinché i servizi verifichino la firma del token. vCenter Server gestisce i certificati di firma STS e li archivia in VMware Directory Service (vmdir).
I token possono avere una durata estesa e, nella loro cronologia possono essere stati firmati da qualsiasi chiave multiple. In questo tutorial mostrerò vari metodi per verificare la valdità dei certificati e le procedure da seguire per il rinnovo.
CHECK DEI CERTIFICATI TRAMITE VSPHERE WEB GUI
Di recente mi è capitato dopo essermi collegato al vSphere Client di imbattermi in un errore relativo ad uin certificato.
Nell’immagine sovrastante l’errore che compare: STS Signing Certificates are about to expire
Dal vSphere Client cliccare su Menu quindi Administration
Nella sezione Certificates selezionare l’opzione Certificate Management
Inserire l’IP o l’FDQN del Server vCenter quindi Username e Password e cliccare su Login and Manage Certificates
Dovremmo visualizzare tutti i certificati presenti con le relative scadenze
CHECK DEI CERTIFICATI TRAMITE SCRIPT
Il check dei certificati è possibile farlo tramite uno script chiamato checksts.py che potete scaricare al fondo di questo articolo.
Prima di tutto dobbiamo copiare lo script all’interno dell’appliance VCSA L’ Appliance Shell predefinita non può essere il partner remoto di WinSCP.
È necessario abilitare la shell Bash sull’appliance, come segue: Avvia una connessione SSH a vCenter Server Appliance.
Fornire il nome utente e la password dell’utente root quando richiesto. Eseguire questo comando per abilitare la shell BASH, se si utilizza il vCenter Server 6.0
0 |
shell.set --enable True |
Quindi abilitare la shell con il comando:
0 |
shell |
Nella shell Bash, eseguire questo comando per modificare la shell predefinita in Bash:
0 |
chsh -s /bin/bash root |
Dopo aver eseguito i comandi sopraelencati collegarsi al server VCSA con il WinSCP per copiare lo script. per comodità io copierò nella /tmp Dalla console SSH posizionarsi nella cartella dove abbiamo copiato lo script con il comando:
0 |
cd /tmp |
Quindi eseguire il comando:
0 |
python checksts.py |
Dovremmo visualizzare una schermata come quella sovrastante con la lista dei certificati attivi e relativa scadenza e la lista dei ceritifcati scaduti
NOTA BENE: solo a partire dal vCenter 7 potremo visualizzare nella vSphere UI la scadenza del certificato STS. Nelle versioni precedenti del vCenter è possibile visualizzare il Certificato Leaf solo da riga di comando.
RIGENERARE I CERTIFICATI USANDO SELF-SIGNED IN VMCA
Come è possibile notare dall’immagine precedente non è presente il certificato STS Questo problema può presentarsi quando si effettua un upgrade del vCenter (nel mio caso sono passato dalla versione 6.5 alla versione 6.7) Collegarsi in SSH al vCenter Server quindi eseguire il seguente comando:
0 |
shell |
Dovremmo visualizzare il seguente output
0 |
Shell access is granted to root |
A questo punto utilizzare il Certificate Manager con il comando:
0 |
/usr/lib/vmware-vmca/bin/certificate-manager |
Dovremmo visualizzare la schermata sovsrastante con tutte le opzioni
Selezionare l’opzione 4 (Regenerate a new VMCA Root Certificate and replace all certificates) quindi premere INVIO
Alla domanda:
0 |
Do you wish to generate all certificates using configuration file : Option[Y/N] ? : Y |
Premere Y quindi INVIO
Alla domanda:
0 1 |
Please provide valid SSO and VC privileged user credential to perform certificate operations. Enter username [Administrator@vsphere.local] |
Inserire l’utente utilizzato per accedere al vCenter quindi premere INVIO Quindi inserire la password dell’utente e premere INVIO
Se è la prima volta che i certificati VMCA vengono rigenerati verrà chiesto di configurare certool.cfg. Nelle attività successive ti verrà offerto di riutilizzare questi valori.
ATTENZIONE: consiglio di lasciare tutto di Default a meno che non si intende inserire dei paramentri personalizzati
Come potete notare dall’immagine sovrastante ho modificato solo l’indirizzo mail, l’Hostname del vCenter e il Name inserirendo l’FDQN del server vCenter
Alla domanda:
0 1 |
You are going to regenerate Root Certificate and all other certificates using VMCA Continue operation : Option[Y/N] ? : Y |
Premere Y quindi INVIO A questo partirà al rigenereazione di tutti i certificare del nostro vCenter
Attendere qualche minuto fino al termine delle ganerazione di tutti i certificati. Se è andato tutto a buon fine dovremmo vedere un immagine come quella sovrastante.
RIGENERARE IL CERTIFICATO STS TRAMITE SCRIPT
Utilizzare questo script quando certificato Security Token Service (STS) è scaduto o sta per scadere.
Ciò fa sì che i servizi interni e gli utenti della soluzione non siano in grado di acquisire token validi e di conseguenza non funzionano come previsto.
Questo si può verificare nei seguenti scenari:
Nuova installazione di PSC/vCenter Server 6.5 a partire da U2 o versioni successive (solo 6.5).
Nuova installazione di PSC/vCenter Server 6.5 U2 o qualsiasi versione successiva 6.5 e aggiornamento a una versione successiva incluse 6.7 e 7.0.
Il certificato di firma STS è stato sostituito utilizzando certool post-installazione di PSC o vCenter Server.
Il certificato di firma STS è stato sostituito con un certificato personalizzato (firmato CA interno/esterno).
ATTENZIONE: Questo script interagisce con il database di VMDIR. Fare uno Snapshot della VM del server vCenter prima di procedere.
Prima di tutto verificare la scadenza del certificato STS tramite script.
Collegarsi alla console SSH e posizionarsi nella cartella dove abbiamo copiato lo script checksts.py con il comando:
0 |
cd /tmp |
Quindi eseguire il comando:
0 |
python checksts.py |
Dovremmo visualizzare una schermata come quella sovrastante con la lista dei certificati attivi e relativa scadenza e la lista dei ceritifcati scaduti.
Come si può notare il Certificato Leaf scadrà tra 71 Giorni invece il Certificato Root scadrà tra 8 anni
0 1 2 3 4 5 6 |
LEAF CERTS: Certificate A0:DA:0D:87:02:B3:C2:58:27:7A:68:B1:89:36:E9:08:74:02:F0:82 will expire in 71 days (0 years). ROOT CERTS: Certificate 55:04:01:7B:53:0C:CF:3F:BA:31:DD:3A:6C:17:D6:C2:21:3B:40:15 will expire in 2988 days (8 years). |
Come è possibile vedere prima della rigenerazione la scadenza del Certificato Leaf è tra 71 Giorni
NOTA BENE: solo a partire dal vCenter 7 potremo visualizzare nella vSphere UI la scadenza del certificato STS. Nelle versioni precedenti del vCenter è possibile visualizzare il Certificato Leaf solo da riga di comando.
Scaricare lo script fixsts.sh allegato al fondo di questo articolo e caricalo sul vCenter Server con WINSCP nella cartella /tmp.
Se la connessione per caricare su vCenter da parte del client SCP viene rifiutata, da una sessione SSH su vCenter eseguire il comando:
0 |
chsh -s /bin/bash |
Quindi connettersi vCenter con una sessione SSH e spostarsi sulla directory /tmp con il comando:
0 |
cd /tmp |
Rendere eseguibile il file con il comando:
0 |
chmod +x fixsts.sh |
Eseguire lo script:
0 |
./fixsts.sh |
Ad un certo punto ci verrà richiesto di inserire la password dell’utente administrator per poter procedere.
Se è tutto corretto dovremmo vedere una schermata come quella sovrastante Per rendere effettive le modifiche
Riavviare i servizi sul vCenter con il seguente comando:
0 |
service-control --stop --all && service-control --start --all |
A questo punto verificare che il Certificato Leaf sia aggiornato esegundo lo script
0 |
python checksts.py |
Dovremmo visualizzare una schermata come quella sovrastante con la lista dei certificati attivi e relativa scadenza e la lista dei ceritifcati scaduti.
Come si può notare il Certificato Leaf scadrà tra 2 Anni invece il Certificato Root scadrà tra 10 anni.
Quindi il rinnovo è avvenuto con successo.
0 1 2 3 4 5 6 |
LEAF CERTS: Certificate A0:DA:0D:87:02:B3:C2:58:27:7A:68:B1:89:36:E9:08:74:02:F0:82 will expire in 730 days (2 years). ROOT CERTS: Certificate 55:04:01:7B:53:0C:CF:3F:BA:31:DD:3A:6C:17:D6:C2:21:3B:40:15 will expire in 3644 days (10 years). |
GENERARE UN NUOVO CERTIFICATO DI FIRMA STS (FACOLTATIVO)
Creare una directory di primo livello per conservare il nuovo certificato e verificare il percorso della directory coni seguenti comandi:
0 1 2 |
mkdir nuovosts cd nuovosts pwd |
Se è OK dovremmo vedere il seguente output:
0 |
/root/nuovosts |
Copiare il file certool.cfg nella nuova directory con il comando:
0 |
cp /usr/lib/vmware-vmca/share/config/certool.cfg /root/nuovosts/certool.cfg |
Aprire la copia del file certool.cfg e modificalo per utilizzare l’indirizzo IP e il nome host del Platform Services Controller locale. Il paese è obbligatorio e deve essere composto da due caratteri, come mostrato nell’esempio seguente.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
# # Template file for a CSR request # # Country is needed and has to be 2 characters Country = US Name = CA Organization = VMWare OrgUnit = VMWare Engineering State = California Locality = Palo Alto IPAddress = 127.0.0.1 Email = email@acme.com Hostname = server.acme.com |
Modificare tutti i parametri a piacimento quindi salvare e chiudere il file di configurazione. Procedere con la generazione della chiave con il comando:
0 |
/usr/lib/vmware-vmca/bin/certool --server localhost --genkey --privkey=/root/nuovosts/sts.key --pubkey=/root/nuovosts/sts.pub |
Se è andato tutto a buon fine dovremmo vedere il seguente output:
0 |
Status : Success |
Generare il certificato con il comando:
0 |
/usr/lib/vmware-vmca/bin/certool --gencert --cert=/root/nuovosts/newsts.cer --privkey=/root/nuovosts/sts.key --config=/root/nuovosts/certool.cfg |
Se è andato tutto a buon fine dovremmo vedere il seguente output:
0 |
Status : Success |
Convertire il certificato nel formato PK12 con il comando:
0 |
openssl pkcs12 -export -in /root/nuovosts/newsts.cer -inkey /root/nuovosts/sts.key -certfile /var/lib/vmware/vmca/root.cer -name "newstssigning" -passout pass:PASSWORD -out newsts.p12 |
NOTA BENE: inserire al posto di PASSWORD una password valida Aggiungere il certificato all’archivio chiavi Java (JKS) con i seguenti comandi:
0 1 2 |
/usr/java/jre-vmware/bin/keytool -v -importkeystore -srckeystore newsts.p12 -srcstoretype pkcs12 -srcstorepass PASSWORD -srcalias newstssigning -destkeystore root-trust.jks -deststoretype JKS -deststorepass PASSWORD -destkeypass PASSWORD /usr/java/jre-vmware/bin/keytool -v -importcert -keystore root-trust.jks -deststoretype JKS -storepass PASSWORD -keypass PASSWORD -file /var/lib/vmware/vmca/root.cer -alias root-ca |
NOTA BENE: inserire al posto di PASSWORD una password valida Se è andato tutto a buon fine dovremmo vedere il seguente output:
0 1 2 3 4 |
Picked up JAVA_TOOL_OPTIONS: -Xms32M -Xmx128M -Dcom.sun.org.apache.xml.internal.security.ignoreLineBreaks=true -Dorg.apache.xml.security.ignoreLineBreaks=true Importing keystore newsts.p12 to root-trust.jks... [Storing root-trust.jks] |
Quindi eseguire il comando:
0 |
/usr/java/jre-vmware/bin/keytool -v -importcert -keystore root-trust.jks -deststoretype JKS -storepass Temporary.1980! -keypass Temporary.1980! -file /var/lib/vmware/vmca/root.cer -alias root-ca |
Dovremmo vedere il seguente output:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Picked up JAVA_TOOL_OPTIONS: -Xms32M -Xmx128M -Dcom.sun.org.apache.xml.internal.security.ignoreLineBreaks=true -Dorg.apache.xml.security.ignoreLineBreaks=true Owner: OU=VMware Engineering, O=vcenter01.studiassociati.it, ST=California, C=US, DC=local, DC=vsphere, CN=vcenter01.studiassociati.it Issuer: OU=VMware Engineering, O=vcenter01.studiassociati.it, ST=California, C=US, DC=local, DC=vsphere, CN=vcenter01.studiassociati.it Serial number: c8fda1f0b985c5ca Valid from: Sat Jan 20 11:12:17 UTC 2024 until: Tue Jan 17 11:12:17 UTC 2034 Certificate fingerprints: SHA1: 55:04:01:7B:53:0C:CF:3F:BA:31:DD:3A:6C:17:D6:C2:21:3B:40:15 SHA256: 9F:CF:AF:84:C7:38:D9:39:21:16:BD:ED:BE:3D:BC:F5:3B:76:88:11:FF:9A:92:60:54:FE:D4:AA:0B:AB:B2:8F Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3 Extensions: #1: ObjectId: 2.5.29.19 Criticality=true BasicConstraints:[ CA:true PathLen:0 ] #2: ObjectId: 2.5.29.15 Criticality=true KeyUsage [ Key_CertSign Crl_Sign ] #3: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 66 85 1B 5D 14 97 7C FE A9 D9 F5 71 F6 94 A9 4D f..].......q...M 0010: 04 E0 69 38 ..i8 ] ] Trust this certificate? [no]: |
Scrivere Yes e premere INVIO Se tutto è andato a buon fine dovremmo vedere il seguente output:
0 1 |
Certificate was added to keystore [Storing root-trust.jks] |
A questo punto riavviare il server vCenter per applicare le impostazioni oppure rivviare i servizi del Platofrm Services Controller con i comandi di seguito:
0 1 |
service-control --stop --all service-control --start --all |
Download “checksts.zip” checksts.zip – Scaricato 692 volte – 2,59 KB
Download “fixsts.zip” fixsts.zip – Scaricato 578 volte – 2,85 KB
![Raffaele Chiatto](https://www.raffaelechiatto.com/wp-content/uploads/2024/01/Avatar-Raffaele-2.png)
Sono Raffaele Chiatto, un appassionato di informatica a 360°…
Mi sono avvicinato al mondo dell’informatica nel lontano 1996 con Windows 95 e da allora non ho più smesso di dedicarmi allo studio ed approfondimento di questo settore.
Laureato in Ingegneria Informatica nel 2009, lavoro nel campo dell’IT dal lontano 2001.
0 commenti