90-Day Certificate Validity
오늘은 구글에서 추친하는 90일의 인증서 유효기간에 대한 이야기를 하려고 합니다. 구글이 올해 3월(2023)에 Chromium Security 를 통해 공지(방향성에 대한 공지)한 이후에 아직 별다른 액션이 없긴 하지만, 한번쯤은 정리하고 미리 준비할 수 있는 것은 준비하는 것이 좋으니 글로 정리하여 남겨봅니다.
Certificate Validity
Chrome, Safari 같은 웹 브라우저 및 여러 어플리케이션은 TLS를 기반으로한 안전한 통신을 사용하기 위해 서버의 인증서를 이용합니다. 인증서는 발급 기관에 따라 특정한 길이의 유효기간을 가지며 현재 많은 서비스들이 1년을 주기로 인증서를 갱신하고 있습니다. 물론 Let’s Encrypt 같이 누구나 인증서 체인에 포함될 수 있는 서비스나, 이를 이용하여 https를 대리로 적용해주는 서비스(e.g Github page)들은 90일이란 짧은 인증서 유효기간을 사용합니다.
제 도메인도 3개월의 인증서 유효기간을 가집니다.
현재 대부분의 웹 브라우저들은 398일의 유효기간까지를 신뢰하고 있습니다. 이는 RFC 5280, Section 4.1.2.5에 명시된 것과 같이 notBefore와 notAfter 필드를 통해 이를 식별합니다.
Google said
현재 대다수가 약 1년이 살짝 넘는 유효기간의 인증서만을 신뢰하지만 구글 크롬에선 이를 좀 더 줄여서 90일까지의 인증서 유효기간을 신뢰하는 정책으로 변경하려는 의지를 가진 것 같습니다. 아직 공식적으로 발표되고 적용된건 아니지만 점유율이 높은 브라우저고, 보통 브라우저 정책이 변경되면 Chrome, Safari, Firefox가 서로 협의 등을 통해 동일 또는 비슷한 형태의 정책을 가져가기 때문에 충분히 변화의 가능성이 있는 상태입니다.
reduced domain validation reuse periods, along with a reduction of the maximum allowed TLS server authentication certificate validity to 90 days. More timely domain validation will better protect domain owners while also reducing the potential for a CA to mistakenly rely on stale, outdated, or otherwise invalid information resulting in certificate mis-issuance and potential abuse. Chromium root-ca-policy
짧은 인증서 유효기간은 당연히 보안성을 챙기지만 서버를 관리하는 입장에선 생각보다 높은 불편함을 초래할 수 있습니다. 구글도 이를 분명 알고 있겠지만 추친하려는 이유를 보면 BGP Hijacking으로 인해 부정 발급된 인증서 또한 장기 유지를 못하도록 막기 때문에 이점이 더 크다고 본 것 같습니다. 개인적인 생각에는 서비스, 회사의 인증서 관리 능력도 가늠할 수 있는 부분이라 시간이 좀 지나면 90일 인증서가 보편화되지 않을까 싶습니다.
For Service & Developer
웹 서버에서 인증서를 통해 https를 제공하는 서비스에선 고려할게 많아졌습니다. 서버, 도메인 운영을 위해 사용하는 서비스에서 자동 갱신(예를들면 AWS의 ACM) 등의 기능을 제공한다면 따로 챙길건 없지만, 그게 아니라면 90일마다 교체를 해야하기 때문에 굉장히 번거로운 작업이 될 수 있습니다. 만약 이러한 경우라면 최소 CI/CD 같은 DevOps Pipeline에서 인증서를 체크하고 만료가 임박할 경우 재 발급을 수행 또는 여러 채널을 통해 Notify하는 Pipine 등은 구성하는게 좋을 것 같습니다.
AWS ACM은 서비스 앞단에서 ACM이 인증서를 핸들링하는 형태를 가집니다
For Security Engineer
Pentest, 보안 테스팅을 하는 입장에선 크게 달라질 것 없을거라고 생각하실 수 있습니다. 다만 예전에 2년 -> 1년으로 변경되었을 때 제게 크게 와닿았던 것이 바로 Burp, ZAP에서 사용하는 인증서였습니다.
임베디드 브라우저를 사용한다면 자체적으로 갱신 처리하고 신뢰 설정을 변경할거라 크게 달라지진 않겠지만, 일반 브라우저에 프록시를 설정해서 사용하거나 모바일 디바이스 등 인증서를 별도로 설정한 경우 종종 만료되기 때문에 상당히 불편하게 됩니다. 특히 도구에서 해당 인증서의 만료 시점을 쉽게 체크할 수 없어서 인증서를 갱신하는 시점이 문제가 발생한 시점이게 되고 보통 초기에 원인을 바로 짚지 못하면 의도치 않은 시간을 소비하게 됩니다.
안그래도 Burp/ZAP 등에서 공통으로 사용할 수 있는 인증서를 만드는 CLI 도구를 천천히 만들던 중이였는데, 이참에 관리적인 기능도 더해서 만료를 모니터링하고, 가능하다면 자동 갱신할 수 있는 도구로 만들어봐야겠습니다. 혹시나 잘 만들어진다면 공유드릴게요 :D