This article shares the steps to remediate VCF environment in case of an Out Of Band certificate change. This is required in case the Root certificates for a WLD vCenter have been reset outside of SDDC Manager and the remediation involves importing the new certificate in SDDC Manager Trust store. Some of the scenarios where this is necessary are:
/var/log/vmware/vcf/operationsmanager/operationsmanager.log on the SDDC Manager:YYYY-MM-DDThh:mm:ss ERROR [vcf_om,########,####] [c.v.e.s.c.s.l.LicenseServiceFactory,om-exec-##] Failed to instantiate License Service with endpoint VC_FQDNcom.vmware.evo.sddc.common.services.psc.exception.PscException: Unable to obtain Security Token Service from SSO '<VC_FQDN>'/var/log/vmware/vcf/commonsvcs/vcf-commonsvcs.log on the SDDC Manager:YYYY-MM-DDTHH:MM:SS ERROR [common,########,####] Caused by: java.security.cert.CertPathBuilderException: No issuer certificate for certificate in certification path found.YYYY-MM-DDTHH:MM:SS ERROR [common,########,####] Renew VAPI session - failed to obtain new sessionorg.springframework.web.client.ResourceAccessException: I/0 error on POST request for "https://<VC_FQDN>/rest/com/vmware/cis/session": certificate_unknown (##)Connection cannot be established because certificate is not trusted" and upon selecting "review" option to attempt to trust the vCenter certificate, the certificate validation fails with error: "Failed to trust Certificate(s). Error while validating certificate"Description: Generate NSX Input for configuring NSXProgress Messages: Failed to fetch object name(s) from vCenterCause: org.bouncycastle.tls.TlsFatalAlert: certificate_unknown(46) Unable to construct a valid chain No issuer certificate for certificate in certification path found.When certificate is replaced directly on the vCenter server managed by an SDDC Manager
Note:
Scripted Process:
VcRootCaSync.py script to the SDDC Manager using Winscp or other file transfer protocol.python VcRootCaSync.py
Expected Output:# python VcRootCaSync.pyPlease provide SSO administrator user[[email protected]]:Provide password for [email protected]:Available vCenter Servers:[1] ACTIVE | vcsa1.example.com[2] ACTIVE | vcsa2.example.com
Select a vCenter server by entering the corresponding number: 1 Selected vCenter: vcsa1.example.com
Session token created successfully Root certificate saved to /tmp/root.cer
vCenter vcsa1.example.com Root Certificate Found:-----BEGIN CERTIFICATE-----##################################################################
-----END CERTIFICATE-----
Using randomly generated Alias: abc-def-vcsa1_RootCrt_EA0G
vCenter Root certificate added to SDDC Manager trust stores. Refreshing certificate store Deleting root certificate from temp
Manual Process:
/tmp on vCenter :
/usr/lib/vmware-vmca/bin/certool --getrootca --cert=/tmp/root.cer/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store trusted_roots | awk 'BEGIN { cert_num=1; in_cert=0 }/-----BEGIN CERTIFICATE-----/ { in_cert=1 outfile = "/tmp/root" cert_num ".cer" print $0 > outfile next}/-----END CERTIFICATE-----/ { print $0 > outfile close(outfile) in_cert=0 cert_num++ next}in_cert { print $0 > outfile}'pass=$(cat /etc/vmware/vcf/commonsvcs/trusted_certificates.key) trusted_certificates_store with the keytool.keytool -importcert -alias <aliasname> -file <certificate file> -keystore /etc/vmware/vcf/commonsvcs/trusted_certificates.store -storepass $passkeytool -importcert -alias <aliasname> -file <certificate file> -keystore /etc/alternatives/jre/lib/security/cacerts --storepass changeit
Note: While the alias name can be arbitrary, it is recommended to use the alias name present in the vCenter's trusted root store for consistency.keytool -list -v -keystore /etc/vmware/vcf/commonsvcs/trusted_certificates.store -storepass $pass | lesscurl -X POST localhost/appliancemanager/trustedCertificates/refreshawk 'NF {sub(//, ""); printf "%s\\n",$0;}' /tmp/vmca.crtFor example:root@vcenter-1 [ ~ ]# awk 'NF {sub(//, ""); printf "%s\\n",$0;}' /tmp/vmca.crt-----BEGIN CERTIFICATE-----<certificate..............>-----END CERTIFICATE-----\n
API Explorer > APIs for managing Trusted Certificates > POST and input the certificate and certificateUsageType.PEM format in the certificate field.TRUSTED_FOR_OUTBOUND into the certificateUsageType field.EXECUTE/opt/vmware/vcf/operationsmanager/scripts/cli/sddcmanager_restart_services.sh