본문 바로가기

Management

[LCM] Root/Intermediate certificate already expired

PKI 구조 이해를 통해, vRealize Suite Lifecycle Manager(이하 vRSLCM)의 CA 인증서가 만료되었을 경우 조치하는 방법을 알아봅니다.

## vRealize Suite Lifecycle Manager

 

사용자가 vRealize Suite Automation(이하 vRA)에 접속을 시도할 때, vRealize Suite Identity Manager(이하 vIDM)과 연동되어 있는 경우, vIDM으로 Login Page가 Redirect 됩니다.

이 때, "username or password incorrect" 메시지와 함께 Login에 실패하는 현상이 있습니다.

이 시점에 vRSLCM에 접속해서 인증서를 확인해 본 결과, 기존 vRA와 vIDM을 위해 발급된 인증서가 만료되어 있는 상태였습니다. 또한, 신규 인증서 발급 시도 시에 "Root/Intermediate certificate already expired" 메시지와 함께 실패하는 상황입니다.

 

우선, 문제 해결에 접근하기 전 PKI가 무엇인지를 알아야 합니다.

PKI의 정의는 Wikipedia에서 다음과 같이 기술되어 있습니다.

간단히 생각해보면, PKI란 우리가 흔히 접하는 인증서를 발급하고 관리하고 보관하는 시스템이 구축된 환경이라고 생각할 수 있습니다.

A public key infrastructure (PKI) is a set of roles, policies, hardware, software and procedures needed to create, manage, distribute, use, store and revoke digital certificates and manage public-key encryption. 

The purpose of a PKI is to facilitate the secure electronic transfer of information for a range of network activities such as e-commerce, internet banking and confidential email. 

PKI에서는 CA(Certificate Authority)가 등장하는데 CA는 인증 기관으로 아래 그림과 같이 계층 구조를 가질 수 있습니다.

인증 기관에서 인증서를 발급할 때, 위와 같이 계층 구조를 가지게 되면 인증서에는 인증 Chain을 가지게 됩니다.

인증서 유효성 검사의 중요한 부분 중 하나가 인증 Chain을 검증하는 것이기 때문에, 계층 구조에 대한 이해가 꼭 필요합니다.

 

이번에는 vRSLCM에 대해서 알아보겠습니다.

vRSLCM은 vRealize 제품들에 대한 수명 주기를 관리해주는 제품으로 여러 가지 역할을 하는데, 그 중 하나로 인증 기관 역할도 있습니다. vRSLCM은 Locker라는 인증 기관을 제공하며, 이 인증 기관을 통해 발급한 인증서를 vRA와 vIDM등 Appliance들을 위해 이용할 수 있습니다.

 

vRSLCM의 Locker는 Certificates, Licenses, Passwords 세 가지 기능을 제공하며 Troubleshooting을 위해 필요한 기능은 Certificates 입니다. 

Certificates 기능을 통해

1) 인증서를 생성하고,

2) 외부에서 생성한 인증서를 가져올 수 있고,

3) 인증 기관에 인증서 생성을 요청하기 위한 요청서인 CSR(Certificate Service Request)을 생성할 수 있습니다.

 

1. Locker 메뉴를 통한 인증서 생성 및 구조 확인

Locker 메뉴에서 생성한 인증서가 어떻게 구성되는지 확인하기 위해, 테스트로 인증서를 생성합니다.

vRSLCM > Locker > Certificates > GENERATE

인증서 생성을 위해서는 필수적으로 입력하는 정보가 있으며, 예를 들어 다음과 같습니다.

Name ## certificate
Common Name ## *.contoso.com
Organization, Organizational Unit, Country Code ## vmware, vmware, KR
Server Domain/Hostname ## *.contoso.com
IP Address : 192.168.1.41(vRSLCM), 192.168.1.51(vIDM), 192.168.1.61(vRA)

정상적으로 인증서를 생성하고 나면, 다음과 같이 등록된 인증서를 확인할 수 있습니다.

이제 이 인증서를 다운로드 받아(확장자 pem) 오픈해보면, 다음과 같이 구성되어 있는 것을 알 수 있습니다.

즉, vRealize Suite Lifecycle Manager Locker CA라는 인증 기관이 있고 이 인증기관을 통해 *.contoso.com이라는 인증서가 발급된 것입니다.

그림으로는 다음과 같이 간단하게 그려볼 수 있겠습니다.

그렇다면, 사용자가 Locker에서 인증서를 발급 시도했을 때 "Root/Intermediate certificate already expired" 메시지가 발생했다는 것은 발급에 필요한 Locker CA의 인증서 자체가 만료되었음을 예상해 볼 수 있습니다.

 

2. Locker CA 인증서 확인

문제가 발생한 환경에서 Locker 메뉴를 통해 발급한 인증서를 다운로드(.pem 파일)하여 Locker CA 인증서를 확인해보면 다음과 같이 일자가 만료되었음을 알 수 있습니다.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1597626633377 (0x173f9f7cca1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=vRealize Suite Lifecycle Manager Locker CA, O=VMware, C=IN
        Validity
            Not Before: Aug 17 01:10:33 2020 GMT ## 발급 일자
            Not After : Aug 17 01:10:33 2022 GMT ## 만료 일자
        Subject: CN=vRealize Suite Lifecycle Manager Locker CA, O=VMware, C=IN
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:bc:d2:bf:0a:a1:c9:12:94:96:0e:81:b2:00:99:

                    fe:ee:de:68:83:9d:fc:12:c3:c0:e4:33:fd:1e:0a:
                    7c:5f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                7A:2A:D2:E7:71:E3:C3:33:80:06:27:81:51:8F:97:23:23:D4:93:7A
            X509v3 Authority Key Identifier:
                keyid:7A:2A:D2:E7:71:E3:C3:33:80:06:27:81:51:8F:97:23:23:D4:93:7A

            X509v3 Key Usage: critical
                Digital Signature, Certificate Sign, CRL Sign
    Signature Algorithm: sha256WithRSAEncryption
         b4:b4:00:1f:2f:1f:90:99:ac:b8:9c:95:40:d4:8c:89:bc:4b:

         c5:df:c4:be
 

이렇게 발급된 인증서를 다운로드 해서 보는 것이 아닌, 직접 Locker CA 인증서를 확인할 수 있는 방법을 조사해봤으나, Swagger-UI에서도 관련된 API를 확인할 수 없었습니다.

다만, 다운로드 해서 보는 것과 유사하게 발급된 인증서가 있는 환경에서 Locker CA 인증서를 확인할 수는 있습니다.

https://developer.vmware.com/apis/1190#/

 

3. Locker CA 인증서 교체

그렇다면, 이제 할 일은 만료된 Locker CA 인증서를 교체하는 것입니다.

문제는 vCenter CA 인증서 교체처럼 certificate-manager와 같은 도구를 이용할 수는 없어 API Endpoint를 호출해야 합니다.

HTTP Method로 PATCH를 이용하는 방법도 있으나, 여기서는 DELETE Method를 이용하여 기존 Locker CA 인증서를 제거하는 방식을 진행합니다.

우선 사전에 필요한 전달 값이, ID와 PW 정보입니다. ID와 PW 정보를 ":"을 이용하여 연결한 후 이 값을 Base64로 Encode 해야 합니다.(Base64 encode를 쉽게 제공하는 웹사이트가 많이 존재합니다.)

예를 들어, ID가 admin@local이고 PW가 P@ssw0rd인 경우 admin@local:P@ssword 형태로 작성한 후 Base64로 Encode 하게 되면 "YWRtaW5AbG9jYWw6UEBzc3cwcmQ=" 과 같은 값을 얻을 수 있습니다.

이 정보와 vRSLCM IP를 이용하여, 다음과 같이 DELETE 명령을 전달할 수 있습니다.

1) Locker CA 인증서 제거
curl --insecure -X DELETE https://192.168.1.41/lcm/locker/api/certificates/alias/DEFAULT_LOKCER_CA -H "Authorization: Basic YWRtaW5AbG9jYWw6UEBzc3cwcmQ="

2) vRSLCM 서비스 재기동
systemctl restart vrlcm-server

 

위 작업을 수행하고 나서, 신규 인증서를 발급해 본 후 동일하게 다운로드하여 Locker CA 인증서를 확인해보면 다음과 같이 만료 일자가 변경된 것을 확인할 수 있습니다.

 

4. 검증

이번 케이스는 고객사 환경에서 진행했을 때, 정상적으로 인증서가 갱신되지 않았기 때문에 실제로 API 호출이 되었는지 검증이 필요했습니다.

 

검증은 다음 순서로 진행할 수 있습니다.

1) API 호출 -> 2) vRSLCM 서비스 재시작 -> 3) API 호출과 재시작 시점의 vRSLCM 로그 확인

※vRSLCM 서비스 로그 위치 : /var/log/vrlcm/vmware_vrlcm.log

 

다음 로그를 보시면, 어떤 흐름으로 인증서가 제거되었다가 서비스가 재기동 되면서 신규 인증서가 생성되는 것을 파악할 수 있습니다.

1) DELETE Method 호출
2022-08-31 09:24:44.808 INFO  [http-nio-8080-exec-5] c.v.v.l.l.u.EngineRequestSubmissionUtil -  -- ++++++++++++++++++ Creating request to Request_Service :::>>> {

  "requestName" : "audit#certificate",
  "requestReason" : "Removed certificate with alias 'DEFAULT_LOCKER_CA'.",
  "requestType" : "AUDIT#CERITIFCATE",

  "createdBy" : null
}

2) 서비스 재기동
(vRSLCM은 Hikari DataSource를 사용하더군요. 아마도 SpringBoot로 작성되었을 것으로 추정됩니다.)
2022-08-31 09:24:59.183 INFO  [Thread-10] c.z.h.HikariDataSource -  -- HikariPool-1 - Shutdown initiated...
2022-08-31 09:24:59.271 INFO  [Thread-10] c.z.h.HikariDataSource -  -- HikariPool-1 - Shutdown completed.
...
            ___      ___      _        ___    __  __
  __ __    | _ \    / __|    | |      / __|  |  \/  |
  \ V /    |   /    \__ \    | |__   | (__   | |\/| |
  _\_/_    |_|_\    |___/    |____|   \___|  |_|  |_|
_|"""""| _|"""""| _|"""""| _|"""""| _|"""""| _|"""""|
"`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-'
...
2022-08-31 09:25:15.798 INFO  [main] c.z.h.HikariDataSource -  -- HikariPool-1 - Starting...
2022-08-31 09:25:15.953 INFO  [main] c.z.h.HikariDataSource -  -- HikariPool-1 - Start completed.

3) Locker CA 인증서 재발급
2022-08-31 09:25:26.877 INFO  [main] c.v.v.l.l.s.p.a.DefaultSigningAuthorityServiceImpl -  -- No default certificate authority (CA) found, generating one.
2022-08-31 09:25:27.531 INFO  [main] c.v.v.l.s.EncryptorService -  -- Key was read from [/opt/vmware/vlcm/cert/encryptor_service.key].

 

5. Load Balancer 고려

인증서 교체 시 빠뜨리지 않아야 할 항목이 Load Balancer 구성 환경입니다.

SSL Passthrough를 사용하는지, SSL Terminate를 사용하는지에 따라 인증서 교체 시 Load Balancer 쪽도 교체 여부를 검토해야 합니다.

SSL Passthrough의 경우에는, End-to-End로 Data를 암호화 하기 때문에 Load Balancer에서 인증서를 이용할 필요가 없지만, SSL Terminate의 경우에는 Load Balancer에서 Data를 복호화 하기 때문에 인증서가 필요하게 됩니다.

고객사 환경마다 이에 대한 구성이 상이할 수 있으니, 인증서 신규 발급 전 이 부분을 꼭 확인해야 합니다.

 

1) SSL Passthrough(https://avinetworks.com/glossary/ssl-passthrough/)

SSL passthrough is the action of passing data through a load balancer to a server without decrypting it.

SSL passthrough keeps the data encrypted as it travels through the load balancer.

Proxy SSL passthrough does not inspect traffic or intercept SSL sessions on network devices before reaching the server since it merely passes along encrypted data.

The configuration of proxy SSL passthrough does not require the installation of a SSL certificate on the load balancer.

 

2) SSL Terminate(https://avinetworks.com/glossary/ssl-passthrough/)

SSL termination is a process by which SSL-encrypted data traffic is decrypted (or offloaded).

SSL termination or SSL offloading decrypts and verifies data on the load balancer instead of the application server.

 

[참고 자료]

Postman을 사용하여 Locker에서 발급한 인증서 확인
https://haewon83.tistory.com/17