问题描述
如果在Azure VM中,发现同一个API,一台VM可以访问成功,另外一台访问失败。如何来调试并定位问题呢?
问题分析
第一步,查看访问外部API不通时候出现什么错误。如果没有明确的错误消息,就通过ping API的域名,检查网络连通性
第二步,nslookup 查看域名是否能够解析成功
第三步,tcpping/ping/psping等各自方式对外部API的域名进行网络连通性检查
第四步, 使用curl -v https://api.kdniao.com 来查看是否能成功与服务器建立连接
第五步,如果发现是SSL建立连接时候出现SSL Certificate problem. 则可以定位出是所访问的外部API服务器证书问题
那如何来解释多台VM的情况下,一些可以,一些不可以呢?
答案:这是因为外部API的服务器并不是一台VM,而是启用了CDN的多个服务器节点,在不同的VM中Dig域名就会拿到不同的服务器IP,而因为旧证书过期,而新证书还没有全网同步的时候,就会在部分VM中出现SSL Certificate Problem:certificate has expired。
如以 api.kdniao.com 为例,解析出来的IP地址有 203.205.159.22 和 106.55.97.71,在Linux机器中,使用curl 访问并指定解析的IP地址,得出两种不同的结果:
一:SSL 连接失败
curl -vo /dev/null 'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx' --resolve api.kdniao.com:443:203.205.159.22
二:SSL 连接成功
curl -vo /dev/null 'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx' --resolve api.kdniao.com:443:106.55.97.71
参考
HTTPS协议、TLS协议、证书认证过程解析 : https://www.cnblogs.com/snowater/p/7804889.html