Viya 4 를 자체 서명 인증서로 배포하면 사용자가 접속할 때마다 브라우저가 인증 경고를 띄운다. 고객사가 공인 인증서 또는 사내 CA 로 발급한 서버 인증서를 제공했을 때 어디에 적용해야 하는지가 이 문서의 주제다.
사용자가 https://<viya-fqdn> 으로 접속할 때 브라우저가 검증하는 것은 인그레스(Front Door)에 걸린 서버 인증서 하나뿐이다. CAS 내부 통신 인증서, Java 신뢰 저장소, 서비스 간 통신 인증서는 브라우저 경고와 무관하다.
sas-bases/examples/security 아래에는 성격이 다른 예제가 함께 들어 있으므로 용도를 구분해야 한다.
| 파일 | 용도 |
|---|---|
customer-provided-ingress-certificate.yaml |
외부 접속용 인그레스 TLS 인증서. 브라우저 경고를 없애려면 이것 |
customer-provided-ca-certificates.yaml |
Viya 내부 서비스가 신뢰할 CA 를 추가한다. 외부 시스템 연동 시 필요 |
customer-provided-cas-connect-certificates.yaml |
CAS·SAS/CONNECT 내부 통신용 |
customer-provided-merge-sas-certframe-configmap.yaml |
SAS CertFrame 설정 보조 |
CA 인증서만 넣고 인그레스 인증서를 그대로 두면 경고는 그대로 남는다.
고객사에서 받아야 할 것은 세 가지다.
체인이 완성되는지 먼저 확인한다.
openssl verify -CAfile ca.crt -untrusted intermediate.crt server.crt
openssl x509 -in ca.crt -noout -text | grep -A2 "Basic Constraints"
ca.crt 의 Basic Constraints 가 CA:TRUE 여야 CA 로 쓸 수 있다. 자체 서명한 서버 인증서를 CA 로 등록하는 것은 잘못된 구성이다. 서버 인증서는 CA:FALSE 라서 Java 계열 컴포넌트가 신뢰 체인으로 인정하지 않고, UI 는 열리는데 일부 기능만 실패하는 진단하기 어려운 상태가 된다.
서버 인증서가 받은 CA 로 서명된 것이라면 fullchain 으로 합친다. 순서는 서버 인증서, 중간 CA, 루트 CA 다.
cat server.crt intermediate.crt ca.crt > fullchain.crt
인그레스가 직접 TLS 를 종단한다면 시크릿을 만들어 인그레스가 참조하게 한다.
kubectl create secret tls viya-tls \
--cert=fullchain.crt \
--key=server.key \
-n <namespace>
Viya 배포 자산을 쓰는 환경에서는 customer-provided-ingress-certificate.yaml 을 site-config 로 복사해 인증서와 키를 지정하고, kustomization.yaml 에 등록한 뒤 다시 빌드·적용한다. 이렇게 해야 재배포와 업그레이드에도 설정이 유지된다.
FQDN 자체를 바꾸는 경우라면 인그레스 호스트만 바꿔서는 부족하다. Viya 내부 서비스가 참조하는 외부 URL 도 함께 갱신해야 리다이렉트와 API 링크가 어긋나지 않는다. 배포된 값은 공유 설정에서 확인할 수 있다.
kubectl -n <namespace> get cm sas-shared-config -o yaml | grep -i url
Compute 파드의 환경 변수에서도 같은 값을 확인할 수 있다.
kubectl -n <namespace> describe pod <compute-pod> | grep SAS_SERVICES_URL
openssl s_client -connect <viya-fqdn>:443 -showcerts </dev/null
브라우저에서 접속해 자물쇠 표시, 리다이렉트 루프 없음, 로그인 정상을 확인한다. 로그인만 실패한다면 인그레스가 아니라 내부 신뢰 체인 문제일 가능성이 크므로 customer-provided-ca-certificates.yaml 로 CA 를 추가했는지 본다.
sas-bases 의 원본 파일을 직접 수정한다.