did:x509: decide whether X509Credential CRL check should honour pki.softfail
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
First review the behavior and policy alternatives in vcr/credential/validator.go, pki/validator.go, and docs/pages/deployment/certificates.rst, then record the chosen policy in this issue. Update the relevant validator, tests in vcr/credential/validator_test.go, documentation, and release notes so they agree; option B also involves pki/interface.go and mock regeneration.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Context
Follow-up to #3530, which introduced pki.Validator.CheckCRLStrict so that did:x509 chains could be checked with a hard-fail strategy regardless of pki.softfail. Noticed while reviewing where the node checks revocation of did:x509 credentials.
Problem
The code and the documentation disagree, and the strict variant is dead code.
- The only did:x509 CRL check, in
x509CredentialValidator.Validate(vcr/credential/validator.go:321), callsCheckCRL, which followspki.softfail(pki/validator.go:146-148). CheckCRLStrict(pki/validator.go:150) is referenced only frompki/interface.go:77and the generated mock.docs/pages/deployment/certificates.rst:28-29states: "For certificate chains used indid:x509the Nuts-node always uses a hard-fail strategy, i.e., thepki.softfailconfig value is ignored during certificate validation fordid:x509."
Actual behaviour with the default pki.softfail=true (pki/config.go:29):
| Situation | Documented | Actual |
|---|---|---|
| Certificate in chain is revoked | Reject | Reject |
CRL cannot be downloaded (ErrCRLMissing) |
Reject | Accept, error log "Certificate CRL check softfail bypass" |
Cached CRL older than pki.maxupdatefailhours (ErrCRLExpired) |
Reject | Accept, error log |
Denylist unavailable (ErrDenylistMissing) |
Reject | Accept, error log |
Either the code or the docs must change. Which one is a policy decision.
Proposal to discuss
Option A: hard-fail, as documented and as decided in #3530.
Change vcr/credential/validator.go:321 to CheckCRLStrict(chain). A did:x509 credential is rejected whenever a CRL in its chain is missing or stale, regardless of pki.softfail. Argument: for did:x509 the certificate chain is the root of trust of the credential, unlike a TLS connection where the CRL is one of several measures.
Option B: honour pki.softfail, as implemented.
Keep CheckCRL, remove CheckCRLStrict from pki.Validator, and rewrite the docs paragraph to say did:x509 follows pki.softfail with an error log on bypass. Argument: an unreachable CRL endpoint would otherwise take down every use case that relies on did:x509 credentials, and operators who want hard-fail can set pki.softfail=false. Downside: that flag also affects TLS validation, so there is no way to get hard-fail for did:x509 only.
Option C: separate knob.
Add a did:x509-specific setting, for example pki.didx509.softfail defaulting to false, and route it to checkCRL. Most flexible, one more config key.
Position: not taken here. The decision should be recorded in the issue before any PR is made.
Scope (either way)
vcr/credential/validator.goandvcr/credential/validator_test.go, orpki/interface.goplus mock regeneration for option Bdocs/pages/deployment/certificates.rst:28-29- Release notes, since option A changes behaviour for operators on the default
pki.softfail=true
Considerations
- #4083 plans to move the CRL check from the validator into the did:x509 resolver and specifies
CheckCRL(chain). The outcome of this decision applies to that location too. checkCRLnever softfails onErrUnknownIssuer, so unknown-issuer handling is unaffected by any option.
Related
- #3530: introduced
CheckCRLStrictfor did:x509 - #3599: X509Credential validation
- #4083: did:x509 resolver CRL check
- Lenguaje dominante
- Go
- Estrellas
- 29
- Forks
- 24
- Merge medio
- 2 d 18 h
- PR fusionados (30 d)
- 45
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nuts-foundation/nuts-node
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
nuts-foundation/nuts-node#4450 ·
Los mantenedores suelen responder en 1 día
-
bug discuss
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
nuts-foundation/nuts-node#4436 ·
Los mantenedores suelen responder en 1 día
-
auth bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
nuts-foundation/nuts-node#4435 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
nuts-foundation/nuts-node#4321 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
nuts-foundation/nuts-node#4230 ·
Los mantenedores suelen responder en 1 día
Todos los issues de nuts-foundation/nuts-node
Issues similares
-
Project submission:Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
slavakurilyak/awesome-ai-agents#845 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
JakeChampion/lang#13132 ·
Los mantenedores suelen responder en 1 día
-
[BUG] deploy.restart_policy without condition drops the restart policyPosiblemente ocupada @akshat-lakhera la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
docker/compose#14383 · 1 comentario ·
Los mantenedores suelen responder en 1 día