Tengo un servidor Node gRPC y un cliente web gRPC (TS con Angular). Estoy usando Nginx como proxy para facilitar la comunicación entre ellos.
No sé cómo configurar el cliente web gRPC (TS) con SSL. Intenté usar mi configuración actual de Nginx y la configuración de Node con un cliente Node gRPC (no web gRPC). Funcionó en ese caso.
Configuración de nodo js: Configuración de nodo Js
Script para generar certificados:
openssl genrsa -passout pass:1111 -des3 -out ca.key 4096 openssl req -passin pass:1111 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Test/CN=ca" openssl genrsa -passout pass:1111 -des3 -out server.key 4096 openssl req -passin pass:1111 -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Server/CN=dev" openssl x509 -req -passin pass:1111 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt openssl rsa -passin pass:1111 -in server.key -out server.key openssl genrsa -passout pass:1111 -des3 -out client.key 4096 openssl req -passin pass:1111 -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Client/CN=dev" openssl x509 -passin pass:1111 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt openssl rsa -passin pass:1111 -in client.key -out client.keyEn el código anterior, en CN=dev, dev es la entrada DNS en el archivo etc/hosts de mi servidor que apunta a la propia dirección del servidor.
Configuración de Nginx:
server { listen 10002 ssl http2; # listen 10002 http2; # include snippets/self-signed.conf; # include snippets/ssl-params.conf; ssl_certificate certs/client.crt; ssl_certificate_key certs/client.key; if ($request_method = OPTIONS) { return 204; } add_header 'Access-Control-Allow-Origin' "$http_origin" always; add_header Access-Control-Max-Age 3600; add_header Access-Control-Expose-Headers Content-Length; add_header Access-Control-Allow-Headers Range; add_header Access-Control-Allow-Headers x-user-agent; add_header Access-Control-Allow-Headers x-grpc-web; add_header Access-Control-Allow-Headers content-type; grpc_ssl_certificate certs/client.crt; grpc_ssl_certificate_key certs/client.key; grpc_ssl_trusted_certificate certs/ca.crt; grpc_ssl_name ace-dev; grpc_ssl_server_name on; # location /Forms.Forms/getExistingForms{ # grpc_pass grpcs://backend; # }; location / { grpc_pass grpcs://192.168.1.59:50051; } #ssl_certificate ssl/cert.pem; #ssl_certificate_key ssl/key.pem; #... }Ahora, la parte de gRPC web (no funciona da un error de protocolo de enlace, no hay documentación adecuada sobre cómo hacerlo, así que intente mirar esto y el código fuente de grpcWeb y asumí que iría de esta manera): web gRPC TLS config
Esto es todo lo que tengo ahora. Cualquier ayuda sería apreciada.
Nginx ya no se admite activamente para grpc-web. Nginx, listo para usar, no entiende la solicitud grpc-web. El proxy predeterminado que admite grpc-web es Envoy. Puede buscar cómo configurar Envoy con sus documentaciones.