블로그 설정 개편: ECDSA 인증서 체인

지난 달에 이어서 블로그 설정 개편 계속.

지난 5월엔 HTTP2 / TLS 1.3 / ECDSA 인증서 발급을 했다 이 시점에는 웹 서버가 사용하는 공개키는 ECDSA 키지만, 이걸 서명하는 중간 단계 인증서는 Let’s Encrypt의 RSA 인증서(R3)를 썼다. 이제 그걸 ECDSA 인증서로 교체하는 작업을 진행했다.

지난 달에 Let’s Encrypt production ECDSA allowlist 에 등록 신청을 했다. 시점은 대략 블로그 글을 작성했던 2021-05-14 즈음. 그리고 이거에 대한 완료 메일을 오늘 아침에 받아서 적용해 봤다.

웹 브라우저로 확인해보면 위의 포럼 글에서 언급하는 것처럼 아래와 같은 인증서 체인으로 나온다.

[내 블로그 인증서] - [E1] - [ISRG Root X2] - [ISRG Root X1]

E1은 현재의 production intermediate 인증서 서명키(ECDSA), IRSG Root X2는 ECDSA용 Let’s Encrypt 루트 인증서에 해당한다. 다만 X2는 작년 가을에야 나왔고, 널리 쓰이고 있지 않아서 대부분의 현 세대 운영체제와 브라우저에서 인식하는 X1으로 서명한 상태. 실제로 인증서 체인 파일 — certbot이 생성한 fullchain.pem — 을 열어보면 ISRG Root X2까지 들어있는 상태. Firefox 인증서 보기로 열어보면 이렇다. 왼쪽부터 세 개는 ECDSA키고, ISRG Root X1은 호환성을 위해서 추가로 들어간 것.

ESRG X1 cert on firefox

추가로, 완전히 ECDSA 키만으로 구성하는 미래를 시험해보았다. Firefox에서 혹은 OS 수준에서 CA 인증서를 추가할 수 있는데, 이걸 이용해서 X2 인증서를 추가했다. (Firefox는 이런 식으로 추가할 수 있다.) 그러면 아래처럼 보인다. (X1 쪽이 빠짐) 웹 브라우저가 사용하는 CA 인증서 목록에 있는게 나올 때까지 chain을 확인(resolve)하는데, X2를 미리 넣어놨으니 거기서 끝나는 것. 이전에는 X2가 없는 상태라 X1이 나올 때까지 확인.

ESRG E1 cert

추가 심심풀이로 오래전 부터 사용 중인(=ACME v1 때 생성한) 인증서 쪽을 확인해보았다. 그런데 이쪽엔 (현재 관점에서는 필요하지 않은) X1 쪽에서 발급한 RSA인증서 체인에 X1도 포함시켜 놨더라. 이건 그 시절엔 X1이 대부분의 브라우저/운영체제에 없어서, Let’s Encrypt 루트 인증서를 DST Root CA X3(IdenTrust)로 서명한 상태여서 그런듯.

충분히 시간이 지나서 X2 인증서가 주요 운영체제와 브라우저에 들어가면 이 X1 포함된 인증서 체인도 X2까지만 있는 것으로 간소화 되리라 기대한다. (서버 인증서랑 E1만 있는 미래가 올거란 얘기)