我似乎不明白幕后发生了什么,但如果有任何指导,我将非常感激。
我有以下grpc服务器是托管在谷歌云运行:
server.js
server.bindAsync(`0.0.0.0:${process.env.PORT}`, grpc.ServerCredentials.createInsecure(), () => { //Notice, this is insecure
server.start();
console.log('GRPC Service Started');
});
然后我得到了一个服务url的形式:https://test-service-abcdefghij-ue.a.run.app
然后下面是使用以下代码连接到上述服务器的客户端:
client.js
... new test_proto.TestAccount("test-service-abcdefghij-ue.a.run.app", grpc.credentials.createSsl()); //Notice I used createSsl instead of createInsecure()
您可以从我的客户端代码中看到,我使用createSsl
而没有传递自签名证书,但是到createInsecure
服务器的连接正常。
我一直认为服务器和客户端必须提供相同的自签名证书。
那么,为什么即使服务器配置为不安全,这仍然有效?这是否意味着无论如何数据仍将以纯文本形式传输?
根据@John Hanley的回复,Cloud Run不支持客户端SSL证书。客户端验证服务器的SSL证书。如果客户端使用HTTP(不安全)连接到Cloud Run服务,Cloud Run会将客户端重定向到HTTPS端点。这意味着最后的连接是用对称加密加密的。然而,加密本身并不意味着连接是安全的。Google Cloud Run还支持IAP来授权用户访问。换句话说,安全连接需要加密和授权。你可以看一下文档