Go跨云虚拟机部署C/S架构时客户端发起请求的方法咨询
跨VM部署Go服务的请求实现原理说明
首先要先确认网络层连通性:服务端所在云虚拟机的安全组、系统防火墙必须放通你服务监听的端口,允许客户端所在VM的公网IP访问,否则所有上层请求都会直接超时失败。
自签名TLS方案的可行性判断
你的思路整体是正确的,核心逻辑如下:
- 如果使用公网可信CA签发的证书,客户端不需要额外配置证书,操作系统自带的根证书池会自动完成服务端身份校验,直接发起HTTPS请求即可。
- 自签名证书因为不在系统默认的可信根证书列表中,TLS握手阶段客户端会因为无法验证服务端身份直接中断连接,因此需要提前把自签名的CA根证书(或服务端证书本身)加入客户端本地的可信证书池,不是单纯在发起请求时临时传入证书参数这么简单。
- 测试阶段如果想简化流程,也可以临时配置客户端跳过服务端证书校验,但该方案存在中间人攻击风险,绝对不能用于生产环境。
- 额外注意:生成自签名证书时,必须把服务端VM的公网IP加入证书的SAN(主题备用名称)字段,否则即使证书被加入信任池,客户端的证书身份校验环节依然会失败。
请求写法的正确性说明
你提到的client.Get(PUBLIC_IP_ADDRESS_OF_VM1:PORT_NUMBER)逻辑方向是对的,但要补全必要信息:
- 地址必须带协议前缀:普通HTTP服务要写为
http://<服务端VM公网IP>:<监听端口>,启用TLS的HTTPS服务要写为https://<服务端VM公网IP>:<监听端口>,缺失协议前缀客户端无法判断使用哪种协议建立连接。 - 如果要发起POST请求,调用客户端对应的POST方法即可,按接口约定携带请求路径、请求头、请求体参数。底层执行逻辑和普通HTTP请求没有区别:客户端先和服务端建立TCP连接,HTTPS服务会在TCP连接建立后先完成TLS握手协商加密密钥,之后按照HTTP协议规范组装请求报文发送给服务端,收到服务端返回的响应报文解析后返回给业务层处理。
内容的提问来源于stack exchange,提问作者Ivette Marie Gonzalez Gueits
相关产品推荐
相关产品推荐

