본문 바로가기

Compute

Fails to start vCenter service due to wrong certificate in vCenter 6.5

 

vCenter에는 여러 종류의 인증서가 존재합니다.

 

인증서를 발급할 때는 UI나 command line에서 발급이 가능한데, 발급 시 필요한 common name이나 SAN(Subject Alternate Name)이 올바르지 않은 경우 발급한 인증서로 갱신했을 때 서비스가 시작되지 않을 수 있습니다.

 

이러한 현상을 겪고 있는 vCenter에서 Troubleshooting 한 내용을 알아보겠습니다.

 

[구성 환경]
vCenter Ver/Build: 6.5 / 19261680
Hostname으로 설치하지 않음
DNS 사용하지 않음

 

[문제 증상]

1. certifiacate-manager 를 이용하여서 8번 전체인증서 갱신이후

vmware 503 service unavailable (failed to connect to endpoint n7vmacore4http16localservicespece = / action = Allow _pipeName =/var/run/vmware/vpxd-webserver-pipe)

 

2. fixsts.sh 수행후, 서비스 종료 하고 서비스 재기동시

Service-control failed. Error Failed to start vmon services.vmon-cli RC=1, stderr=failed to start vapi-endpoint, vpxd-svcs services. Error: Operation time out

 

[Troubleshooting Notes]

1. 인증서 만료 기간 확인

1-1. STS 인증서

## 만료된 STS LEAF 인증서는 fixsts.sh 로 갱신

root@photon-machine [ /tmp ]# ./checksts.py
 
1 VALID CERTS
================
 
        LEAF CERTS:
        None
        ROOT CERTS:
        [] Certificate ### will expire in 2899 days (7.0 years).
 
1 EXPIRED CERTS
================
 
        LEAF CERTS:
        [] Certificate: ### expired on 2023-10-08 05:58:40 GMT!
        ROOT CERTS:
        None
 
    WARNING!
    You have expired STS certificates.  Please follow the KB corresponding to your OS:
    VCSA:  https://kb.vmware.com/s/article/76719
    Windows:  https://kb.vmware.com/s/article/79263

 

 

1-2. Machine/Solution User 인증서

## 만료된 인증서 없음 

root@photon-machine [ ~ ]# for store in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list | grep -v TRUSTED_ROOT_CRLS); do echo "[*] Store :" $store; /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $store --text | grep -ie "Alias" -ie "Not AFter" ;done;
[*] Store : MACHINE_SSL_CERT
Alias : __MACHINE_CERT
            Not After : Sep  6 01:48:22 2025 GMT
[*] Store : TRUSTED_ROOTS
Alias : 2cd1f8cdc86b41e91acc28b25d1a18e3054cd089
            Not After : Oct  3 06:07:35 2031 GMT
[*] Store : machine
Alias : machine
            Not After : Sep  6 01:48:46 2025 GMT
[*] Store : vsphere-webclient
Alias : vsphere-webclient
            Not After : Sep  6 01:48:57 2025 GMT
[*] Store : vpxd
Alias : vpxd
            Not After : Sep  6 01:49:08 2025 GMT
[*] Store : vpxd-extension
Alias : vpxd-extension
            Not After : Sep  6 01:49:19 2025 GMT
[*] Store : SMS
Alias : sms_self_signed
            Not After : Oct  8 06:14:46 2031 GMT
[*] Store : BACKUP_STORE_H5C
Alias : bkp__MACHINE_CERT
            Not After : Oct  8 18:08:05 2023 GMT
Alias : bkpmachine
            Not After : Oct  8 05:59:38 2023 GMT
Alias : bkpvsphere-webclient
            Not After : Oct  8 05:59:48 2023 GMT
Alias : bkpvpxd
            Not After : Oct  8 05:59:59 2023 GMT
Alias : bkpvpxd-extension
            Not After : Oct  8 06:00:09 2023 GMT

 

1-3. VMCA 인증서(Root CA) 

root@photon-machine [ ~ ]# /usr/lib/vmware-vmca/bin/certool --getrootca --cert=vmca.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            c9:0e:a1:a8:42:9d:1b:2a
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=CA, DC=vsphere, DC=local, C=US, ST=California, O=photon-machine, OU=VMware Engineering
        Validity
            Not Before: Oct  5 06:07:35 2021 GMT
            Not After : Oct  3 06:07:35 2031 GMT
        Subject: CN=CA, DC=vsphere, DC=local, C=US, ST=California, O=photon-machine, OU=VMware Engineering
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
<snip>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
<snip>
            X509v3 Subject Alternative Name:
                email:email@acme.com, IP Address:127.0.0.1
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
    Signature Algorithm: sha256WithRSAEncryption
<snip>
Certificate written to file : vmca.crt
Status : Success

 

2. 구성 환경 확인

## hostname이 photon-machine으로 되어 있고,

## DCName과 PNID가 IP address로 설정

*****************************************
*** Overview of Customers Environment ***
*****************************************
- hostname: photon-machine
  uptime or last reboot: 1:04
    reboot history, based on 'wtmp' file, filtered by 'reboot':
      # hint: if the 'uptime' command shows a different time than the 1st line of the 'wtmp' file, see https://via.vmw.com/EZvX
      reboot   system boot  4.4.276-1.ph1    Wed Nov  1 00:46:19 2023 - Wed Nov  1 08:49:53 2023  (08:03)
      reboot   system boot  4.4.276-1.ph1    Fri Sep  8 03:08:51 2023 - Wed Nov  1 00:44:44 2023 (53+22:35)
      reboot   system boot  4.4.276-1.ph1    Thu Aug 18 03:07:14 2022 - Fri Sep  8 03:08:40 2023 (386+00:01)
      reboot   system boot  4.4.243-1.ph1    Fri Oct  8 06:51:07 2021 - Thu Aug 18 03:07:03 2022 (313+20:15)
  ¦I¦ my uptime is '0' days, the GSS average is '74.5' days, based on '6414' samples
 
- the Primary Network Identifyer (PNID) from the VMware Authentication Framework (vmafd)
  +  "DCName"                  REG_SZ          "192.168.1.5"
  +  "DomainName"              REG_SZ          "vsphere.local"
  +  "PNID"                    REG_SZ          "192.168.1.5"
  +  "SiteName"                REG_SZ          "contoso"
    Hint: if the hostname is not identical to the PNID then KB2130599 may be useful

 

3. vCenter 6.5 설치 테스트 결과, 설치 시 FQDN을 이용하지 않고 IP Address를 입력하면 다음과 같이 hostname이 자동으로 photon-machine으로 설정

## 고객사도 동일하게 설치했을 것으로 추정

 

root@photon-machine [ ~ ]# hostname
photon-machine
 
root@photon-machine [ ~ ]# cat /etc/systemd/resolved.conf
 
[Resolve]
LLMNR=false
DNS=127.0.0.1 192.168.1.5
 
root@photon-machine [ ~ ]# /opt/likewise/bin/lwregshell list_values "[HKEY_THIS_MACHINE\Services\vmafd\Parameters]"
+  "CAPath"                  REG_SZ          "/etc/ssl/certs"
+  "DCName"                  REG_SZ          "192.168.1.5"
+  "DCPort"                  REG_DWORD       0x000001bb (443)
+  "DomainName"              REG_SZ          "vsphere.local"
+  "DomainState"             REG_DWORD       0x00000001 (1)
+  "LDU"                     REG_SZ          "e769bfa2-ec01-4770-87ac-7c18e1b6bb44"
+  "PNID"                    REG_SZ          "192.168.1.5"
+  "RHTTPProxyPort"          REG_DWORD       0x000001bb (443)
+  "SiteName"                REG_SZ          "samsung"
   "CertificateSyncInterval" REG_DWORD       0x0000003c (60)
   "DcCacheHeartBeat"        REG_DWORD       0x0000001e (30)
   "DcCacheSyncInterval"     REG_DWORD       0x0000003c (60)
   "EnableDCERPC"            REG_DWORD       0x00000001 (1)
   "KeytabPath"              REG_SZ          "/usr/lib/vmware-vmafd/share/config/krb5.keytab"
   "Krb5Conf"                REG_SZ          "/etc/krb5.lotus.conf"
   "LegacyModeHA"            REG_DWORD       0x00000000 (0)
   "LogFile"                 REG_SZ          "/var/log/vmware/vmafd/vmafdd.log"

 

4. /var/log/vmware/vapi/endpoint/endpoint.log 분석

## 문제 증상에서 Service-control failed. Error Failed to start vmon services.vmon-cli RC=1, stderr=failed to start vapi-endpoint, vpxd-svcs services. Error: Operation time out 메시지를 확인했기 때문에 우선 vapi-endpoint 로그 분석

## STS 인증서를 갱신한 이후 시점 임에도 No subject alternative names matching IP address 192.168.1.5 found 와 같이 인증서 관련 오류 발생

2023-11-01T00:47:30.926Z | INFO  | main                      | ApiEndpointServer              | Using default start timeout value: 3,600,000 milliseconds
2023-11-01T00:47:30.944Z | INFO  | main                      | NodeTypeUtil                   | Node type from configuration file is EMBEDDED
2023-11-01T00:47:30.944Z | INFO  | main                      | ApiEndpointServer              | Starting in management node mode.
 
 
2023-11-01T00:57:04.973Z | INFO  | state-manager1            | BaseServerBuilder              | Starting endpoint with name 'default' on address(es): 127.0.0.1, ::1 with port: 12346
2023-11-01T00:57:05.144Z | INFO  | state-manager1            | DefaultJettyServer             | Starting jetty server.
2023-11-01T00:57:05.633Z | INFO  | state-manager1            | BaseServerBuilder              | Started endpoint with name 'default' on address(es): 127.0.0.1, ::1 with port: 12346
.
2023-11-01T00:57:05.634Z | INFO  | state-manager1            | DefaultStateManager            | Invoking cis-sso-settings-builder
2023-11-01T00:57:05.945Z | INFO  | state-manager1            | CertificateUtil                | Creating anonymous SSO Admin Client for URI https://10.224.13.10/sso-adminserver/sdk/vsphere.local
2023-11-01T00:57:06.919Z | INFO  | state-manager1            | DefaultStateManager            | Invoking sts-builder
2023-11-01T00:57:08.196Z | ERROR | state-manager1            | SoapBindingImpl                | Error communicating to the remote server https://10.224.13.10/sts/STSService/vsphere.local
cohttp://m.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 192.168.1.5 found
        at cohttp://m.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:117)
        at cohttp://m.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:208)
        at cohttp://m.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:130)
        at cohttp://m.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:124)
        at cohttp://m.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:1121)
        at cohttp://m.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:1035)
        at cohttp://m.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:1004)
        at cohttp://m.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:862)
        at cohttp://m.sun.xml.internal.ws.client.Stub.process(Stub.java:448)
        at cohttp://m.sun.xml.internal.ws.client.dispatch.DispatchImpl.doInvoke(DispatchImpl.java:250)
        at cohttp://m.sun.xml.internal.ws.client.dispatch.DispatchImpl.invoke(DispatchImpl.java:289)
        at cohttp://m.vmware.vim.sso.client.impl.SoapBindingImpl.sendMessage(SoapBindingImpl.java:161)
        at cohttp://m.vmware.vim.sso.client.impl.SoapBindingImpl.sendMessage(SoapBindingImpl.java:114)
        at cohttp://m.vmware.vim.sso.client.impl.SecurityTokenServiceImpl$RequestResponseProcessor.sendRequest(SecurityTokenServiceImpl.java:784)
        at cohttp://m.vmware.vim.sso.client.impl.SecurityTokenServiceImpl$RequestResponseProcessor.executeRoundtrip(SecurityTokenServiceImpl.java:714)
        at cohttp://m.vmware.vim.sso.client.impl.SecurityTokenServiceImpl.acquireTokenByCertificate(SecurityTokenServiceImpl.java:473)
        at cohttp://m.vmware.vapi.endpoint.cis.StsBuilder.createToken(StsBuilder.java:179)
        at cohttp://m.vmware.vapi.endpoint.cis.StsBuilder.rebuild(StsBuilder.java:77)
        at cohttp://m.vmware.vapi.endpoint.cis.StsBuilder.buildInitial(StsBuilder.java:54)
        at cohttp://m.vmware.vapi.state.impl.DefaultStateManager.build(DefaultStateManager.java:354)
        at cohttp://m.vmware.vapi.state.impl.DefaultStateManager$1.doInitialConfig(DefaultStateManager.java:168)
        at cohttp://m.vmware.vapi.state.impl.DefaultStateManager$1.run(DefaultStateManager.java:151)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 192.168.1.5 found
        at sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:370)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:313)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:652)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:471)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:367)
        at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:376)
        at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:479)
        at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:457)
        at sun.security.ssl.TransportContext.dispatch(TransportContext.java:200)
        at sun.security.ssl.SSLTransport.decode(SSLTransport.java:154)
        at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1290)
        at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1199)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:401)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
        at sun.net.http://www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:587)
        at sun.net.http://www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)
        at sun.net.http://www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1340)
        at sun.net.http://www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1315)
        at sun.net.http://www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:264)
        at cohttp://m.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:104)
        ... 28 more
Caused by: java.security.cert.CertificateException: No subject alternative names matching IP address 192.168.1.5 found
        at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:173)
        at sun.security.util.HostnameChecker.match(HostnameChecker.java:99)
        at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:441)
        at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:422)
        at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:1289)
        at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1256)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:636)
    ... 45 more

 

※ 인증서에서 SAN(Subjet Alternate Name)이란?

https://www.ssl.com/ko/%EA%B8%B0%EC%82%AC/San-%EC%9D%B8%EC%A6%9D%EC%84%9C%EC%97%90-%EB%8C%80%ED%95%9C-%ED%95%84%EC%88%98-%EA%B0%80%EC%9D%B4%EB%93%9C/#:~:text=%EB%B0%8F%20%EA%B6%8C%EA%B3%A0%20%EC%82%AC%ED%95%AD-,SAN%20%EC%9D%B8%EC%A6%9D%EC%84%9C%20%EB%9E%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F,%EB%8C%80%EC%B2%B4%20%EC%9D%B4%EB%A6%84%22%EC%9C%BC%EB%A1%9C%20%EB%82%98%EC%97%B4%EB%90%A9%EB%8B%88%EB%8B%A4.

 

5. STS 인증서는 정상적으로 갱신된 것으로 확인

## /var/log/vmware/sso/ssoAdminServer.log 분석

## 2023-11-01-T00:56분경 이전에 STS 인증서가 갱신된 것으로 확인

[2023-10-31T01:26:12.837Z expiryCheckScheduler-1 opId= ERROR cohttp://m.vmware.identity.admin.server.impl.STSCertExpiryChecker] STS Signing Certificates have expired!
[2023-10-31T01:26:12.837Z expiryCheckScheduler-1 opId= DEBUG cohttp://m.vmware.identity.admin.server.impl.STSCertExpiryChecker] logging STS signing certificate expiry event
[2023-10-31T01:26:12.854Z expiryCheckScheduler-1 opId= ERROR opslogger] {"user":"n/a","client":"n/a","timestamp":"10/31/2023 01:26:12 UTC","description":"STS Signing Certificates h
ave expired","eventSeverity":"WARNING","type":"cohttp://m.vmware.sso.STSCertExpiry"}
 
[2023-11-01T00:44:42.456Z localhost-startStop-2 opId= INFO  cohttp://m.vmware.identity.admin.server.impl.AdminApplicationListener] Heartbeat stopped
[2023-11-01T00:46:45.171Z localhost-startStop-1 opId= DEBUG cohttp://m.vmware.identity.idp.IdpManagementImpl] catalina.base environment variable is /usr/lib/vmware-sso/vmware-sts
[2023-11-01T00:46:45.266Z localhost-startStop-1 opId= DEBUG cohttp://m.vmware.identity.idp.IdpManagementImpl] IDP- store from server  file:- MACHINE_SSL_CERT
[2023-11-01T00:46:45.279Z localhost-startStop-1 opId= INFO  cohttp://m.vmware.identity.admin.server.impl.AdminApplicationListener] Heartbeat started
[2023-11-01T00:46:45.309Z expiryCheckScheduler-1 opId= ERROR cohttp://m.vmware.identity.admin.server.impl.STSCertExpiryChecker] STS Signing Certificates have expired!
[2023-11-01T00:46:45.313Z expiryCheckScheduler-1 opId= DEBUG cohttp://m.vmware.identity.admin.server.impl.STSCertExpiryChecker] logging STS signing certificate expiry event
[2023-11-01T00:46:45.553Z expiryCheckScheduler-1 opId= ERROR opslogger] {"user":"n/a","client":"n/a","timestamp":"11/01/2023 00:46:45 UTC","description":"STS Signing Certificates h
ave expired","eventSeverity":"WARNING","type":"cohttp://m.vmware.sso.STSCertExpiry"}
 
[2023-11-01T00:56:06.015Z localhost-startStop-1 opId= DEBUG cohttp://m.vmware.identity.idp.IdpManagementImpl] catalina.base environment variable is /usr/lib/vmware-sso/vmware-sts
[2023-11-01T00:56:06.105Z localhost-startStop-1 opId= DEBUG cohttp://m.vmware.identity.idp.IdpManagementImpl] IDP- store from server  file:- MACHINE_SSL_CERT
[2023-11-01T00:56:06.122Z localhost-startStop-1 opId= INFO  cohttp://m.vmware.identity.admin.server.impl.AdminApplicationListener] Heartbeat started
[2023-11-01T00:56:06.142Z expiryCheckScheduler-1 opId= INFO  cohttp://m.vmware.identity.admin.server.impl.STSCertExpiryChecker] STS Signing Certificates NOT within expiry warning threshold, expires in 729 days ### <-- !!

 

6. 문제가 되는 로그가 "No subject alternative names" 이기 때문에 인증서의 SAN(Subject Alternative Name) 확인

6-1. STS 인증서

# certificate [1] from './storage/vmware-vmon/signingcert.crt'
  Version: 3
  Serial Number: UNKNOWN
  X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment
  Issuer: CN=VMware vCenter Server Appliance (1), DC=vsphere, DC=local, C=US, ST=California, O=photon-machine, OU=VMware Engineering
  Not Before: Nov  1 00:44:37 2023 GMT | Not After : Oct 31 00:44:37 2025 GMT | expires in '729' days
  Subject: CN=STS, C=DS, ST=VMware, L=VMware, O=VMware, OU=VMware
  Public-Key: (2048 bit)
  X509v3 Subject Alternative Name: email:email@acme.com, IP Address:192.168.1.5, DNS:192.168.1.5 ### <-- !!
  Signature Algorithm: sha256WithRSAEncryption
<snip>

 

6-2. MACHINE_SSL 인증서

# openssl x509 -in ./etc/vmware-vpx/ssl/rui.crt -noout -text
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                f7:2f:b5:1b:63:19:a8:9e
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN=CA, DC=vsphere, DC=local, C=US, ST=California, O=photon-machine, OU=VMware Engineering
            Validity
                Not Before: Sep  6 01:48:22 2023 GMT
                Not After : Sep  6 01:48:22 2025 GMT
            Subject: CN=192.168.1.5, C=US
<snip>
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Subject Alternative Name: ### <-- !!
                    IP Address:192.168.1.5
      
<snip>

 

7. STS 인증서는 KB에서 제공하는 fixsts.sh 로 갱신하였고, 나머지 인증서는 사용자가 certificate-manager를 이용하여 갱신했기 때문에 STS 인증서는 용의 선상에서 제외

 

8. LAB 환경에서 MACHINE_SSL 인증서를 수동으로 갱신할 때, 필요한 정보 확인

## MACHINE_SSL_CERT.cfg 파일에서 IPAddress, Email, Hostname이 SAN 항목에 추가

## 해당 인증서를 가지고 교체 시도하고 서비스 재시작 시 정상적으로 완료 

root@photon-machine [ /certs ]# cp /usr/lib/vmware-vmca/share/config/certool.cfg MACHINE_SSL_CERT.cfg
 
root@photon-machine [ /certs ]# cat MACHINE_SSL_CERT.cfg
#
# 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 = 192.168.1.5
Email = email@acme.com
Hostname = 192.168.1.5
 
2023-11-02T17:18:05.508Z INFO certificate-manager Output :
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            e7:55:1c:86:e3:85:15:61
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=CA, DC=vsphere, DC=local, C=US, ST=California, O=photon-machine, OU=VMware Engineering
        Validity
            Not Before: Nov  2 16:45:36 2023 GMT
            Not After : Nov  1 16:45:36 2025 GMT
        Subject: CN=192.168.1.5, C=US, ST=California, L=Palo Alto, O=VMware, OU=VMware Engineering
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c6:0f:1f:ee:aa:13:88:7d:03:db:50:2e:ab:01:
                    d6:92:a5:87:3c:67:22:9f:e9:92:eb:a6:18:4e:eb:
                    7e:d7:ad:c7:f1:94:08:43:f5:85:8c:b9:da:f1:9d:
                    cb:55:1a:ca:8a:06:59:7e:b2:79:e8:45:55:56:3e:
                    d6:91:7d:2a:c5:3c:15:b7:79:f3:76:e9:5f:67:5f:
                    3e:f2:37:10:9a:0e:84:1e:df:ad:3c:ff:72:cd:e6:
                    be:8e:2d:b3:3e:78:d4:a3:78:e3:51:01:5f:2f:81:
                    75:5c:fe:8f:13:1d:2a:91:74:67:8d:9a:46:ab:22:
                    63:d1:d6:bf:1a:aa:31:aa:73:1f:06:13:92:94:23:
                    df:0f:ec:8f:07:00:35:22:0d:31:1f:51:f4:5c:1d:
                    5e:3d:a2:b0:e6:10:aa:90:53:79:da:ca:a7:5f:07:
                    03:6c:c6:32:77:30:c7:60:4e:14:be:cd:fb:47:0f:
                    b0:f2:d7:fc:60:29:d3:53:85:3e:70:1a:30:e4:4a:
                    c3:7d:ad:40:6f:a6:ce:78:58:d2:6b:4b:43:4f:78:
                    d7:b3:da:74:3d:31:9f:3b:28:e7:96:6f:33:f9:63:
                    0c:12:d0:a4:46:77:5f:26:93:21:2e:24:09:76:90:
                    f0:32:c3:03:89:1f:81:42:4f:8b:e8:fa:00:da:c0:
                    04:ab
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name:
                email:email@acme.com, IP Address:192.168.1.5, DNS:192.168.1.5 ### <-- !!
<snip>
 
# /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store MACHINE_SSL_CERT --alias __MACHINE_CERT
# /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store MACHINE_SSL_CERT --alias __MACHINE_CERT --cert MACHINE_SSL_CERT.crt --key MACHINE_SSL_CERT.priv
# service-control --stop --all && service-control --start --all

 

9. 문제 환경을 재현하기 위해서 고객과 동일하게 인증서에 SAN 항목을 구성

## IP Address에 실제 IP Address를 입력하고 hostname은 제거

root@photon-machine [ /certs ]# cp /usr/lib/vmware-vmca/share/config/certool.cfg MACHINE_SSL_CERT.cfg
 
root@photon-machine [ /certs ]# cat MACHINE_SSL_CERT.cfg
#
# 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 = 192.168.1.5
Email = email@acme.com
 
root@photon-machine [ /certs ]# cat MACHINE_SSL_CERT.crt
-----BEGIN CERTIFICATE-----
MIIEAzCCAuugAwIBAgIJAN9jdKYw539MMA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD
VQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZ
FgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFzAVBgNV
BAoMDnBob3Rvbi1tYWNoaW5lMRswGQYDVQQLDBJWTXdhcmUgRW5naW5lZXJpbmcw
HhcNMjMxMTAzMDY1ODQ5WhcNMjUxMTAyMDY1ODQ5WjB6MRQwEgYDVQQDDAsxOTIu
MTY4LjEuNTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExEjAQBgNV
BAcMCVBhbG8gQWx0bzEPMA0GA1UECgwGVk13YXJlMRswGQYDVQQLDBJWTXdhcmUg
RW5naW5lZXJpbmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRePHT
AxyeMCY8NMe5aznibhZ7K+db+h1SHPiz39/DIwSuFThLEa2upnzlhM5J+VTZmxss
ZIO55k2YZqqL7lJvgTVM/SSap/V1QlJOXLm8+0g43BwhbyUci1WLhiR0rrWWwuIM
2j86FvE7u6Tqcal23hgpGfjB5FMNTvTltvLT9pxem3x0DyjpIvt0om4qDoruT7qf
kdSIKEDRRtZOdEQh1YRmlBxHrDcn6o3GaHP5HiFT26lt1+2328O2gETwskD2jH3l
58WJmV2TRHqPmH14JWWHgTmrVmLhATtgTon4gueBomTrEuPmT7J8Iws6AuLPw0YN
k7av3C0QbMk1WdXHAgMBAAGjcDBuMAsGA1UdDwQEAwIF4DAfBgNVHREEGDAWgQ5l
bWFpbEBhY21lLmNvbYcEwKgBBTAdBgNVHQ4EFgQUupcmsRUu31zPfnZOjhhDeB5A
FEswHwYDVR0jBBgwFoAUFqHavWXhrIU8TR7S/W+JiPilq8kwDQYJKoZIhvcNAQEL
BQADggEBAKY0xmafGEETcWbEKj2FqSJMJo1VU73KavoZXMX3YtazAytwQpjYtrgF
AA781crrrC5NnoXK4t+C9I40tnAQ+t7SLIpVXsNG3XUrEoqVDRZsgSn5ncgWEqsp
y6IkNHKHWiD+n6mOlQ5FXYGK7SR8W1YvEPszQRhmm1+Mp2XHrs9unUrZJBVVrGUD
GJMLJPjJfRP31qjGaO0pFmBTKc0ugcnFyEJPjxS93/3VqVTAMCxxkGZxJqmX1x2n
myjdmLmjntFYyMzSBgg2FV0yjOsQhbJ5EzLpDL1KQl0pHQ3LhBlZxmJ13X8MizU3
gOsVr9nWRO9JFvC43/8YAIVaKjBhU1M=
-----END CERTIFICATE-----

 

10. 해당 인증서를 이용하여, VECS에 있는 기존 MACHINE_SSL 인증서와 교체하고 서비스 재시작 

## 기존 MACHINE_SSL 인증서 백업 후 제거
# /usr/lib/vmware-vmafd/bin/vecs-cli entry getcert --store MACHINE_SSL_CERT --alias __MACHINE_CERT > backup_MACHINE_CERT.crt
# /usr/lib/vmware-vmafd/bin/vecs-cli entry getkey --store MACHINE_SSL_CERT --alias __MACHINE_CERT > backup_MACHINE_CERT.ke
# /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store MACHINE_SSL_CERT --alias __MACHINE_CERT
 
## 신규 MACHINE_SSL 인증서 적용
# /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store MACHINE_SSL_CERT --alias __MACHINE_CERT --cert MACHINE_SSL_CERT.crt --key MACHINE_SSL_CERT.priv
 
## 서비스 재시작
# service-control --stop --all && service-control --start --all

 

11. 서비스 재시작 시 고객과 동일한 오류 발생

2023-11-03T04:46:25.802Z   Running command: ['/usr/bin/systemctl', 'set-environment', 'VMON_PROFILE=NONE']
2023-11-03T04:46:25.806Z   Done running command
2023-11-03T04:46:25.815Z   Running command: ['/usr/bin/systemctl', 'daemon-reload']
2023-11-03T04:46:25.911Z   Done running command
2023-11-03T04:46:25.911Z   Running command: ['/usr/bin/systemctl', 'set-property', u'vmware-vmon.service', 'MemoryAccounting=true', 'CPUAccounting=true', 'BlockIOAccounting=true']
2023-11-03T04:46:25.916Z   Done running command
2023-11-03T04:46:27.183Z   Running command: ['/usr/bin/systemctl', 'unset-environment', 'VMON_PROFILE']
2023-11-03T04:46:27.187Z   Done running command
Service-control failed. Error Failed to start vmon services.vmon-cli RC=1, stderr=Failed to start vapi-endpoint, vpxd-svcs services. Error: Operation timed out ### <-- !!

 

12. /var/log/vmware/vapi/endpoint/endpoint.log 로그 확인 시 동일한 메시지 확인

Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 192.168.1.5 found
        at sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:370)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:313)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:652)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:471)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:367)
        at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:376)
        at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:479)
        at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:457)
        at sun.security.ssl.TransportContext.dispatch(TransportContext.java:200)
        at sun.security.ssl.SSLTransport.decode(SSLTransport.java:155)
        at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1320)
        at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1233)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:417)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:389)
        at sun.net.http://www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:558)
        at sun.net.http://www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:201)
        at sun.net.http://www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1354)
        at sun.net.http://www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1329)
        at sun.net.http://www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:264)
        at cohttp://m.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:104)
        ... 28 more
Caused by: java.security.cert.CertificateException: No subject alternative names matching IP address 192.168.1.5 found
        at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:173)
        at sun.security.util.HostnameChecker.match(HostnameChecker.java:99)
        at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:441)
        at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:422)
        at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:1291)
        at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1258)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:636)

 

[Action Plan]

결과적으로 MACHINE_SSL 인증서 갱신 시, SAN 항목에 들어가는 정보를 모두 입력 필요

1. 수동으로 MACHINE_SSL 인증서를 갱신할 때는 다음과 같이 IP Address, Hostname에 모두 IP Address를 올바르게 입력하거나, 

root@photon-machine [ /certs ]# cat MACHINE_SSL_CERT.cfg
#
# 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 = 192.168.1.5
Email = email@acme.com
Hostname = 192.168.1.5

 

2. /usr/lib/vmware-vmca/bin/certificate-manager 도구를 통해 MACHINE_SSL 인증서를 갱신할 때는

동일하게 configuration 파일에 들어갈 내용 중 IP Address와 Hostname을 모두 IP Address로 입력 필요

root@photon-machine [ /usr/lib/vmware-vmca/bin ]# /usr/lib/vmware-vmca/bin/certificate-manager
                 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                |                                                                     |
                |      *** Welcome to the vSphere 6.5 Certificate Manager  ***        |
                |                                                                     |
                |                   -- Select Operation --                            |
                |                                                                     |
                |      1. Replace Machine SSL certificate with Custom Certificate     |
                |                                                                     |
                |      2. Replace VMCA Root certificate with Custom Signing           |
                |         Certificate and replace all Certificates                    |
                |                                                                     |
                |      3. Replace Machine SSL certificate with VMCA Certificate       |
                |                                                                     |
                |      4. Regenerate a new VMCA Root Certificate and                  |
                |         replace all certificates                                    |
                |                                                                     |
                |      5. Replace Solution user certificates with                     |
                |         Custom Certificate                                          |
                |                                                                     |
                |      6. Replace Solution user certificates with VMCA certificates   |
                |                                                                     |
                |      7. Revert last performed operation by re-publishing old        |
                |         certificates                                                |
                |                                                                     |
                |      8. Reset all Certificates                                      |
                |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
Note : Use Ctrl-D to exit.
Option[1 to 8]: 3
 
Please provide valid SSO and VC priviledged user credential to perform certificate operations.
Enter username [Administrator@vsphere.local]:
Enter password:
certool.cfg file exists, Do you wish to reconfigure : Option[Y/N] ? : y
 
Press Enter key to skip optional parameters or use Previous value.
 
Enter proper value for 'Country' [Previous value : US] :
 
Enter proper value for 'Name' [Previous value : CA] :
 
Enter proper value for 'Organization' [Previous value : VMware] :
 
Enter proper value for 'OrgUnit' [Previous value : VMware Engineering] :
 
Enter proper value for 'State' [Previous value : California] :
 
Enter proper value for 'Locality' [Previous value : Palo Alto] :
 
Enter proper value for 'IPAddress' (Provide comma separated values for multiple IP addresses) [optional] : 192.168.1.5
 
Enter proper value for 'Email' [Previous value : email@acme.com] :
 
Enter proper value for 'Hostname' (Provide comma separated values for multiple Hostname entries) [Enter valid Fully Qualified Domain Name(FQDN), For Example : example.domain.com] : 192.168.1.5