网络 gRPC + NGINX TLS 配置
web gRPC + NGINX TLS configuration
我有一个 Node gRPC 服务器和一个 Web gRPC 客户端(TS with Angular)。我正在使用 Nginx 作为代理来促进它们之间的通信。
我不知道如何使用 SSL 配置 Web gRPC 客户端 (TS)。我尝试将我当前的 Nginx 配置和节点配置与节点 gRPC 客户端(不是网络 gRPC)一起使用。它在那种情况下有效。
节点js配置:
Node Js Config
生成证书的脚本:
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.key
在上面的代码中,在 CN=dev 中,dev 是我服务器 etc/hosts 文件中的 DNS 条目,指向服务器自己的地址。
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;
#...
}
现在,web gRPC 部分(不工作导致握手错误,没有适当的文档如何做,所以尝试查看 this 和 grpcWeb 源代码并假设它会这样):
web gRPC TLS config
这就是我现在的全部。任何帮助将不胜感激。
grpc-web 不再主动支持 Nginx。开箱即用的 Nginx 不理解 grpc-web 请求。默认支持 grpc-web 的代理是 Envoy。您可以查看如何使用他们的文档配置 Envoy。
我有一个 Node gRPC 服务器和一个 Web gRPC 客户端(TS with Angular)。我正在使用 Nginx 作为代理来促进它们之间的通信。
我不知道如何使用 SSL 配置 Web gRPC 客户端 (TS)。我尝试将我当前的 Nginx 配置和节点配置与节点 gRPC 客户端(不是网络 gRPC)一起使用。它在那种情况下有效。
节点js配置: Node Js Config
生成证书的脚本:
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.key
在上面的代码中,在 CN=dev 中,dev 是我服务器 etc/hosts 文件中的 DNS 条目,指向服务器自己的地址。
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;
#...
}
现在,web gRPC 部分(不工作导致握手错误,没有适当的文档如何做,所以尝试查看 this 和 grpcWeb 源代码并假设它会这样): web gRPC TLS config
这就是我现在的全部。任何帮助将不胜感激。
grpc-web 不再主动支持 Nginx。开箱即用的 Nginx 不理解 grpc-web 请求。默认支持 grpc-web 的代理是 Envoy。您可以查看如何使用他们的文档配置 Envoy。