NPMplus Important information about Certificates/CAs/OCSP Must-Staple Release
요약
핵심 내용:
오늘 Let's Encrypt이 중요한 알림을 발표했는데, NPMplus에 큰 영향을 미칩니다. 자세한 내용은 여기에서 확인할 수 있습니다: https://letsencrypt.org/2024/12/05/ending-ocsp
이 주제에 대한 질문/아이디어 등이 있으면 댓글을 남겨주세요.
OCSP/CRLs란?
- 첫째: OCSP, OCSP 스테이플링 및 OCSP 머스트-스테이플은 다른 개념입니다.
OCSP:
- OCSP는 클라이언트(브라우저)가 CA(Let's Encrypt)에게 웹 서버가 사용하는 인증서가 폐기되었는지 물어보는 것입니다.
- 이는 CA와 클라이언트 간의 확인이며, NPMplus는 이에 영향을 미치지 않습니다.
- 폐기가 클라이언트에 의해 발견될 것이며(캐시 때문에 다시 확인할 수 있음), 개인 정보 문제가 있음(파이어폭스/썬더버드 설정에서 비활성화 가능, 다른 클라이언트에 대해 확실하지 않음, 크롬은 이를 지원조차 안 함)
- https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol
OCSP 스테이플링 무법사플링(Must-Staple) 없이:
- 30일 인증서는 독자적으로 유효하지만, "두 번째 인증서"에 대해 추가 확인됩니다.
- NPMplus의 모든 certbot 인증서에 대해 항상 활성화됨(이전 인스턴스 및 머스트-스테이플 비활성화시도에서도)
- "두 번째 인증서"는 7일 동안만 유효함
- 웹 서버가 CA에게서 "두 번째 인증서"를 요청함(nginx 구현이 좋지 않기 때문에, NPMplus는 certbot-ocsp-fetcher를 사용함)
- 브라우저는 웹 서버와만 대화하므로 개인 정보 문제가 없음
- 그러나: 인증서가 손상된 경우, OCSP 스테이플링 없이도 해당 인증서를 사용할 수 있으며, 이 경우 클라이언트가 폐기를 감지하지 못할 수 있음(다른 방법으로 클라이언트-CA OCSP/CRLs를 감지하지 않는 한)
=> 머스트-스테이플 미사용시 쓸모없음, 아래 참조 - https://en.wikipedia.org/wiki/OCSP_stapling
OCSP 스테이플링 무법사플링(Must-Staple) 포함:
- 위와 동일하지만, 30일 인증서는 혼자서는 유효하지 않고, "두 번째 인증서"가 필요함
- 이 요구 사항은 인증서 자체의 일부이며(삭제 불가), 인증서 생성 시 추가됨(NPMplus에서는 모든 certbot 인증서에 대해 머스트-스테이플 요구가 기본적으로 활성화되어 있으나 환경 변수를 통해 비활성화 가능)
- 폐기는 "두 번째 인증서"가 만료되면 클라이언트가 감지하며, 클라이언트가 머스트-스테이플을 지원하는 경우
=> 유용, 클라이언트에서 지원되면 유효성이 있는 "두 번째 인증서"의 만료로 인해 폐기가 즉시 감지됨 - https://en.wikipedia.org/wiki/OCSP_stapling
CRLs
- 폐기를 감지하기 위한 오래된 기술
- CA는 모든 폐기된(여전히 유효한) 인증서에 관한 정보가 포함된 거대한 목록을 게시하고, 크롬/파이어폭스/썬더버드는 이러한 목록의 컬렉션을 다운로드함
- 문제: 크기 때문에 목록에 모든 폐기된 인증서가 포함되지 않을 수 있음
=> 의존성: 인증서의 폐지 정보가 포함되지 않은 경우 쓸모 없게 될 수 있음, 그렇지 않으면 괜찮음 - https://en.wikipedia.org/wiki/Certificate_revocation_list
(주로 머스트-스테이플에 대한) 내 의견:
- 첫째로, 그들이 이에 대한 비용과 개인 정보 문제로 인해 OCSP를 제거하는 것을 이해한다.
- 그러나 Must-Staple 지원을 제거하는 것은 이해할 수 없다. 이는 CRL보다 더 나은 방법이다.
- 그들이 대부분의 웹 서버가 이에 대해 좋은 구현을 갖고 있지 않다고 주장하는 것은 완전한 사실이 아님, 예를 들어 caddy와 같이 좋은 지원 기능을 갖춘 서버가 있음 또는 네이킹스 자체로도 certbot-ocsp-fetcher 스크립트를 통해 잘 지원됨((무료) nginx 자체 구현은 최상이 아님) ⇒ 이로 돌아가는 이유가 충분하지 않다고 생각함
- 클라이언트 관련 주장은 불행하게도 사실이기 때문에, 크롬(및 파생 프로그램)이 머스트-스테이플을 지원하지 않음 이므로, 크롬 외에 남아 있는 주요 클라이언트는 파이어폭스/썬더버드 뿐임(WebKit/safari 및 아웃룩과 같은 다른 주요 메일 클라이언트에 대한 정보는 확실하지 않음)
이제 뭘 해야 할까요?
- 좋은 해결책이 없다고 말해야 할 것입니다:
- ZeroSSL로 옮기는 것이 옵션이 될 수 있지만, 이들은 CRLs 지원이 없으며, 이것이 중요한 이유는 크롬(및 파생 프로그램)에게 영향을 줄 수 있음
- Let's Encrypt에 머스트-스테이플 기능을 잃을 수도 있음
- 그러나 결정을 내려야하며 크롬이 매우 중요하기 때문에, 기본적으로 Let's Encrypt에 남아 있겠습니다. 대신 ACME_MUST_STAPLE의 기본값을 변경할 것임, 아마도 스테이플링은 완전히 제거되어야 할 수 있으므로, 사용자 지정 CA가 지원하는 경우도 무필요한지요, 그러나 이를 방지할 방법을 찾아보겠습니다.
- 만약 ZeroSSL이나 다른 공개 ACME 지원 CA에서 OCSP 스테이플링/머스트-스테이플 및 CRLs를 지원한다면, 새로운 기본 CA가 될 것임
언제 변화가 일어날까요?
- 2025년 1월 30일 이전(신규 인스턴스에 대해 머스트-스테이플이 작동 중지될 날)
- 정확한 날짜는 없으나, 해당 변경이 이루어지기 전까지 릴리스를 몇 번 하겠습니다:
- 최소한 이러한 변경 사항을 롤백하는 릴리스가 있는 릴리스는 곧 나올 것입니다.
- 그 사이(또는 다음 릴리스와 함께), ACME_MUST_STAPLE 값이 모든 certbot 인증서의 갱신 구성과 동기화되어 갱신된 인증서가 환경 변수와 동일한 설정을 갖도록 하겠습니다(ACME_SERVER 환경 변수도 동기화할 수 있습니다).
- ACME_MUST_STAPLE이 기본적으로 false로 변경되며(스테이플링도 제거될 수 있음) - 아마도 여전히 12월에 변경될 것임
- 사용자가 설정한 환경 변수는 덮어쓰지 않습니다.
원문 내용
Note: This is not a new release but an important information
Let's Encrypt has made an announcement today which has a huge impact on NPMplus, you can read it here: https://letsencrypt.org/2024/12/05/ending-ocsp
If you have any question/ideas etc. on this topic, please write a comment
What is OCSP/CRLs?
- first: OCSP, OCSP Stapling and OCSP Must-Staple are different things.
OCSP:
- With OCSP the client (Browser), asks the CA (Let's Encrypt) if the Certificate used by the web server was revoked
- This is a check done between CA and Client, NPMplus has no influence on this
- Revocation will be detected by the client if the client (re)checks for it (recheck because of cache which could exist)
- privacy problems since the CA knows things which it should not (can be disabled in Firefox/thunderbird settings, not sure about other clients, chrome doesn't even support this)
=> useful, but with a privacy problem, maybe takes some time to be detected because of cache - https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol
OCSP Stapling without Must-Staple:
- your 30 days cert is valid on its own, but it is additionally verified by a “second certificate”
- always enabled for all certbot certs of NPMplus (also for migrated instances and also if you disable must-staple)
- the “second certificate” is valid only for 7 days
- the “second certificate” is requested by the web server from the CA (since nginx implementation is not the best, NPMplus uses certbot-ocsp-fetcher for this)
- no privacy problem since browser only talks to the web sever and not to the CA
- BUT: if the cert is compromised, the cert can still be used WITHOUT OCSP Stapling and through that revocation is not be detected by the client (if the client doesn't detect trough other ways client-CA OSCP/CRLs)
=> useless without must staple, see below - https://en.wikipedia.org/wiki/OCSP_stapling
OCSP Stapling with Must-Staple:
- same as above, but your 30 days cert is NOT valid on its own, it needs a “second certificate” to be valid
- this requirement is part of the cert itself (so not removable) and added while creating the cert (must-staple requirement is enabled by default with NPMplus for all certbot certs, but can be disabled via ENV)
- Revocation will be detected as soon as the “second certificate” expires and if the client support must-staple
=> useful, if supported by the client, maybe takes some time to be detected because of validity of “second certificate” - https://en.wikipedia.org/wiki/OCSP_stapling
CRLs
- the older technology to detect revocation
- CAs publish huge lists containing information about all revoked (and by date still valid) certificates and chrome/Firefox/thunderbird download collections of these lists
- Problem: because of size, lists may not contain all revoked certs
=> depends: if the revocation information of your cert is not included, then it is useless, otherwise it is ok - https://en.wikipedia.org/wiki/Certificate_revocation_list
My opinion on this (I mostly talk about Must-Staple)
- first I understand that they remove OCSP because of the costs they have through it and because of the privacy concern
- BUT I don't understand that they remove Must-Staple support, it is better then CRL
- They argue that most web servers have no good implementation for this, which is not fully true, like caddy which has good support for this or NPMplus itself through the certbot-ocsp-fetcher script ((free)nginx own implementation is not the best) ⇒ I don't think that this argument is big enough to revert to CRLs
- The argument with the client is sadly true, since chrome (and it forks) doesn't support must-staple, so the only big clients remaining are Firefox/thunderbird (not sure about WebKit/safari and other big mail clients like outlook)
What now?
- I must say, there is no good solution:
- Moving to ZeroSSL would be an option, but they have no CRLs support, which is important for chromium (and forks)
- Staying with Let's Encrypt would mean to lose Must Staple functionality
- But since a decision needs to be made and chrome is very important, I will stay with Let's Encrypt by default and instead change the default value of ACME_MUST_STAPLE, maybe stapling needs to be fully removed even if your custom CA supports it, but I will try to find a way to prevent this
- If ZeroSSL or any other public ACME supporting CA will have support for OCSP Stapling/Must-Staple and CRLs, then this will become the new default CA
When will the change happen?
- Before January 30, 2025 (the day Must-Staple will stop working for new instances)
- I have no date exactly, but I will try to have some releases until this change:
- at least on release mentioning this change in its changelog, in a few days
- in between (or maybe with the next release), I will sync the value of ACME_MUST_STAPLE with all renewal configs of certbot cert to make sure that certs which get renewed will have the same setting as the env (maybe I will also sync the ACME_SERVER env)
- and at some point ACME_MUST_STAPLE will be changed to false by default (and stapling may be removed) - maybe still in December
- ENVs set by you will not be overridden
링크 : https://github.com/ZoeyVid/NPMplus/releases/tag/ocsp-stapling-must-staple