이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Kubernetes/Kubernetes 에러 경험

x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

이쿠우우 2021. 1. 12. 21:06
반응형

 

 

 

 

x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

 

상황

Kubernetes 1.18.3 version 에서는 정상적으로 동작이 됐었는데

Kubernetes 1.19.2 version으로 업데이트 하고 

Portieris 0.8.2 설치 후 적용하니 

Pod 배포 시 아래와 같이 오류가 발생.

 

[오류 메세지]

Error from server (InternalError): error when creating "1_deployment.yaml": Internal error occurred: failed calling webhook "trust.hooks.securityenforcement.admission.cloud.ibm.com": Post "https://portieris.portieris.svc:443/admit?timeout=30s": x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

 

원인

Kubernetes 1.19.2 update node 확인을 해보니

아래와 같은 사항이 있음

https://kubernetes.io/docs/setup/release/notes/
Kubernetes is now built with golang 1.15.0-rc.1.
The deprecated, legacy behavior of treating the CommonName field on X.509 serving certificates as a host name when no Subject Alternative Names are present is now disabled by default. It can be temporarily re-enabled by adding the value x509ignoreCN=0 to the GODEBUG environment variable. (#93264, @justaugustus) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Storage and Testing]

 

기존에는 Wildcard 형식의 인증서도 사용가능했었지만

Kubernetes 1.19 versino 부터 golang 1.15.0-rc.1로 빌드되면서

인증서 사용 시 SAN(Subject Alternative Name)인증서를 사용해야함.

임시로 GODEBUG=x509ignoreCN=0 환경변수를 설정해서

Wildcard 인증서도 사용할 수 있지만 말 그대로 임시 대처법임.

 

 

해결책

인증서를 SAN형식으로 생성해줘야함.

 

SAN 인증서 생성 예제

SAN 인증서가 아닌 Wildcard 형식의 인증서의 경우 생성 부분이 아래와 같음.

해당 부분을 보아하니 default로 생성되던 인증서는 wildcard 형식의 인증서임.

cat > "$CERT_DIR"/server.conf << EOF

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, serverAuth
EOF

 

Wildcard 형식의 인증서를 SAN형식 인증서로 변경하기 위해

다음과 같이 변경해줌.

 

cat > "$CERT_DIR"/server.conf << EOF

[req]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
countryName                = KR
localityName               = Locality Name (eg, city)
organizationName           = IKSOON
commonName                 = Portieris
[ v3_req ]
subjectAltName = @alt_names
[alt_names]
DNS.1   = portieris.portieris.svc
DNS.2   = trust.hooks.securityenforcement.admission.cloud.ibm.com
EOF 

위와 같이 SAN 형식 인증서를 사용해서 문제를 해결.

 

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

반응형