require_tls only enforced on RFC 6764 discovery, not on explicit URLs
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 62/100
- Tipo de issue
- Documentación
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- python
- Área
- documentation
Línea de trabajo
Lee la documentación de require_tls y las docstrings de los constructores de DAVClient y AsyncDAVClient; el issue no indica archivos específicos. Aclara que la opción se aplica actualmente al descubrimiento de RFC 6764, no a las URL proporcionadas explícitamente, y que la aplicación global se aplaza a la versión 4.0. Se considerará terminado cuando el alcance documentado coincida con el comportamiento actual.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
require_tls was added together with the .well-known forwarding, as one out of two measures to prevent a man-in-the-middle-attack. However, something went wrong because in the current main the configuration option is not checked anywhere. In the current v3.3.0-dev branch and future v3.3.0-release there is a fix which will honor this variable but only for well-known forwarding. I think this is silly, it should be for all connections.
Now True is and should be the default. If doing this for all connections, it will be a breaking change - so it's procrastinated until the 4.0-release.
I was too lazy to create this issue myself, so below is the initial text from Claude.
⚠️ This issue is AI-generated (Claude Opus 4.8 via Claude Code) on behalf of tobixen ⚠️
Summary
require_tls is named and documented as if it guarantees a TLS-only connection, but it currently only gates the RFC 6764 discovery path. When a fully-qualified URL is passed explicitly, the parameter has no effect.
Current behaviour (v3.3.x)
The parameter is threaded only through discovery:
DAVClient.__init__ / AsyncDAVClient.__init__ → _auto_url(require_tls=...) → discover_caldav(require_tls=...) → discover_service (where d6267c78 closed the well-known-redirect hole).
But _auto_url returns early for any URL containing /, so discovery — and therefore the require_tls check — is skipped entirely. Result:
# require_tls=True is the DEFAULT, yet this connects over plaintext:
DAVClient(url="http://caldav.example.com/dav/", username=..., password=...)
A parameter literally named require_tls does not require TLS for the connection actually made. This is a name/behaviour mismatch and a potential downgrade footgun.
Proposed fix (deferred to 4.0)
Make enforcement global rather than discovery-only:
- Add a shared
BaseDAVClient._enforce_require_tls(url)helper (there is no shared__init__today — the two constructors are separate). - Call it from both
DAVClient.__init__andAsyncDAVClient.__init__right after URL objectification, rejecting non-httpsURLs whenrequire_tls=True. - Update docstrings + CHANGELOG.
Why this is deferred (breaking change)
require_tls defaults to True. Making it global would reject every explicitly-passed http:// URL by default, which breaks real usage:
- The project's own docker integration test servers (Cyrus, SOGo, Baikal, …) are all
http://localhost:PORT/.... - Anyone running an internal/LAN CalDAV server over plain HTTP with default args.
So this changes the default security posture and is a breaking change — appropriate for a major release (4.0), with require_tls=False threaded through the test config.
Out of scope for the constructor check
A constructor-time scheme check does not catch an https → http downgrade via redirect during live requests. If "applies to any connection" is taken literally, the per-request path in each client needs enforcement too — worth tracking separately.
Decision
For now: keep require_tls discovery-only and document the scope precisely (done alongside this issue). Revisit global enforcement in 4.0.
⚠️ This issue is AI-generated (Claude Opus 4.8 via Claude Code) on behalf of tobixen ⚠️
- Lenguaje dominante
- Python
- Estrellas
- 412
- Forks
- 113
- Merge medio
- 10 h 29 min
- PR fusionados (30 d)
- 57
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la 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 python-caldav/caldav
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
python-caldav/caldav#792 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
python-caldav/caldav#788 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 75/100
python-caldav/caldav#796 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
python-caldav/caldav#784 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
python-caldav/caldav#783 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de python-caldav/caldav
Issues similares
-
[oblt-aw][autodoc] Update workflow docs for gh-aw v0.92.5 and detector permission scopePosiblemente ocupada @github-actions la tomó hoy. Abierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
feat(ide): VS Code access through the shipped MCP server (config doc and tool-list smoke test)Abiertoroadmap-100
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
comp/tools P2 tool/browser tool/file type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
NousResearch/hermes-agent#143418 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
python-hyper/uritemplate#164 ·