grpc-js: secure channel to an IP address fails on Node 25+ (servername set to IP literal)
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 75/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- grpc, node.js, typescript
- Área
- backend-api-design, networking
Línea de trabajo
Empieza en channel-credentials.ts, en getConnectionOptions, y después comprueba cómo SecureConnectorImpl.connect gestiona los errores de tls.connect. La reproducción del issue muestra el fallo con un destino IP y el éxito con un nombre de host; confirma el comportamiento con esa reproducción en Node 26. La tarea estará lista cuando los destinos IP se conecten sin pasar un literal IP como servername, mientras que los nombres de host sigan conectándose.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem description
Credentials from createSsl() cannot connect to a target given by IP address on Node 25 and later.
getConnectionOptions in channel-credentials.ts sets servername = remoteHost unconditionally (since #1466). Node 25 made DEP0123 End-of-Life (nodejs/node#58533), so tls.connect now throws instead of warning when servername is an IP literal:
ERR_INVALID_ARG_VALUE: The property 'options.servername' Setting the TLS ServerName to an IP address is not permitted.. Received '127.0.0.1'
The throw happens inside the connect promise in SecureConnectorImpl.connect, so the caller only ever sees 14 UNAVAILABLE: No connection established. Hostname targets work. Node 26 is the current LTS, so this now hits default installs.
Reproduction steps
Any TLS gRPC server listening on 127.0.0.1:PORT, then:
const grpc = require('@grpc/grpc-js');
const client = new grpc.Client('127.0.0.1:PORT',
grpc.credentials.createSsl(null, null, null, { rejectUnauthorized: false }));
client.waitForReady(Date.now() + 2000, err => console.log(err ? err.message : 'connected'));
Node 24: connected
Node 26: Failed to connect before the deadline
Wrapping tls.connect to log its options shows servername: '127.0.0.1' on every attempt, and the synchronous ERR_INVALID_ARG_VALUE throw.
Environment
- Linux 7.0, amd64
- Node v26.13.0 (works on v24.17.0)
- fnm
- @grpc/grpc-js 1.14.7, same code on master
Additional context
Node's own https agent already skips SNI for IP literals. Same one-line change here:
if (!net.isIP(remoteHost)) {
connectionOptions.servername = remoteHost;
}
- Lenguaje dominante
- TypeScript
- Estrellas
- 4.8k
- Forks
- 720
- Merge medio
- 2 d 11 h
- PR fusionados (30 d)
- 7
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 grpc/grpc-node
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
grpc/grpc-node#3112 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
CompressionFilter’s IdentityHandler.writeMessage calls Buffer-only .copy() on caller-provided messagePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
package: @grpc/grpc-js
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
grpc/grpc-node#2993 · 3 comentarios · 5 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de grpc/grpc-node
Issues similares
-
FR: Support CJK brackets, symbols and full-width markers in footnoteHeuristics (EBPAJ support)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
readest/readest#7413 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
content triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
eliasstravik/herdr-projects#788 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Ability to edit tagsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día