问题描述

如果在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

【Azure 环境】当在Azure 环境中调用外部接口不通时,如何定位SSL Certificate Problem的更多相关文章

  1. C#中调用Windows API时的数据类型对应关系

    原文 C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32 BOOLEAN=System.Int32 BYTE=System.UInt16 CHAR=System. ...

  2. git中的SSL certificate problem: unable to get local issuer certificate错误的解决办法

    我们在使用git初始化一个项目时,尤其是通过git submodule update --init --remote初始化子模块时,可能会遇到下面这个错误: fatal: unable to acce ...

  3. 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)

    之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...

  4. Titanium中调用ios组件时语言不是本地化的解决方法

    用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? ...

  5. react 在 componentWillMount() 中调用异步函数时,componentWillMount() finishes after render()

    刚开始使用 react,很多属性.方法不是很熟.在此记录下我所遇到的问题及解决方法. 我在 componentWillMount() 中调用了一个异步函数,在返回结果中调用 this.setState ...

  6. 项目中调用ExcelCom组件时的配置流程

    异常提示如下:         Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有:        1 文件名称或路径不存在.       2 文件正被其他程序使 ...

  7. 在Java中调用Python

    写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...

  8. c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法

    最近项目中需要实现一个服务器宕机后短信提醒的功能,个人觉得在使用Python 写http请求这块很方便,发短信这块就使用了python,但是c++程序中调用这个脚本时,编译不通过,提示如下错误: er ...

  9. 关于在C#中构造函数中调用虚函数的问题

    在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...

  10. 【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)

    Terraform(全称:Hashicorp Terraform )是一种开源工具,用于预配和管理云基础结构. 它将基础结构编入描述云资源拓扑的配置文件中. 这些资源包括虚拟机.存储帐户和网络接口等. ...

随机推荐

  1. SHA加密在实际应用中的优势与局限

    SHA加密算法简介 SHA(Secure Hash Algorithm)加密算法是一种单向加密算法,常用于加密数据的完整性校验和加密签名.它是由美国国家安全局(NSA)设计并广泛应用于各种安全场景.S ...

  2. 在K8S中,Pod生命周期包含哪些?

    在Kubernetes(简称K8s)中,Pod的生命周期经历了一系列状态变化.以下是Pod可能处于的一些主要状态: Pending: 当创建一个Pod时,它首先会进入Pending状态.这个状态下,K ...

  3. 【一文搞定】Linux、Mac、Windows安装Docker与配置教程!

    目录 一.Windows 安装 1.1 安装与启用 Hyper-V 1.2 安装 WSL 1.3 Docker Desktop 官方下载 1.4 安装Docker Desktop 二.MacOS 安装 ...

  4. 脑科学与人工神经网络ANN的发展历程与最新研究

    本文深入研究了ANN的基本概念.发展背景.应用场景以及与人脑神经网络的关系. 关注TechLead,分享AI全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复 ...

  5. Java中的自动装配注解

    1.说明 springboot 框架的亮点之一就是依赖注入和自动装配,它避免了我们在写代码时纠结类的生命周期问题 本文只记录一些注解的常用方法,并不深入说明 2.@Autowired 顾名思义,该注解 ...

  6. PHP截取文章内容

    <?php /** * 实现中文字串截取无乱码的方法. */ function getSubstr($string, $start, $length) { if (mb_strlen($stri ...

  7. Linux中国开源社区停止运营

    layout: post title: "Linux 中国开源社区停止运营" tags: - "Linux" 昨天看到老王发的公众号文章,Linux中国开源社区 ...

  8. 好书推荐之《JAVA编程思想》

    名人推荐 真是一本透着编程思想的书. 上面的书让你从微观角度了解 Java,而这本书则可以让你从一个宏观角度了解 Java. 这本书和 Java 核心技术的厚度差不多,但这本书的信息密度比较大. 所以 ...

  9. AsyncHttpClient And Download Speed Limit

    AsyncHttpClient Official repository and docs: https://github.com/AsyncHttpClient/async-http-client M ...

  10. Git Conventional Commits (Git代码提交说明规范)

    Conventional Commits (代码提交说明规范) Conventional Commits 是关于Git Commit 提交代码时, 填写的说明文字的一个规范. 这个规范提供了一套易于理 ...