有做开发的朋友说,网站浏览器打开正常,接口调不通,换了半天代码没用。我说先别改代码,看看证书链配全了没有。这个问题,看着像代码,实际在证书上。
接口报错,先看证书链
浏览器打开网站正常,是因为浏览器会自动补全缺失的中间证书。但不是所有客户端都会补,服务器之间的调用通常不补。
所以会出现一种很迷惑的现象:人工用浏览器访问没问题,程序调用却报证书错误。很多人第一反应是改代码,改到天亮也没用。
我们处理这类问题的习惯是先看证书链完整不完整。工具一测就知道,比改代码快得多。
中间证书少了会怎样
一张证书通常由三层组成:根证书、中间证书,再加上站点证书。服务器上如果只配了站点证书,中间那层缺失,链路就断了。
断链的后果是部分客户端能通、部分不能通。浏览器能用,小程序、App 或者服务端调用却报错。
正确的做法是把站点证书和中间证书一起配置到服务器上,形成完整的链条。这一步配对了,报错一般就消失了。
不同客户端表现不一样
证书链的问题最难的地方是表现不一致。同一个接口,手机上能调,服务器上报错,看着像网络问题,其实是证书。
我们的建议是不要只用浏览器测。浏览器测通过之后,再用命令行工具模拟一次接口调用,看证书校验是不是也通过。
还有一点,证书更新之后要重新检查链路。换证书的时候,新的中间证书可能和旧的不一样,配漏了又会复发。
还有一种情况是证书本身没问题,是服务器的配置漏了一行。配置的时候把中间证书和站点证书的顺序摆对。顺序错了也会报错,而且报错信息看不太出来问题在哪。
证书链上最实际的几个疑问
浏览器正常接口报错是什么原因
多半是证书链不完整。浏览器会自动补,程序调用不会,所以表现不一样。
怎么查证书链是否完整
用在线工具或者命令行工具测一下,能看到证书链有没有缺层,比翻日志快。
换证书后为什么又报错了
新证书的中间证书可能变了。换完要重新检查一遍链路,别只替换站点证书。
常斌的团队看这事,会这么讲:接口报错不可怕。可怕的是把证书问题当成代码问题,白改一夜。
配完先自己测一遍
我的建议是配完证书,先用浏览器、再用命令行走一遍。两种方式都通过,才算配好了。
100 多个商业应用的交付经验,让流程里该卡的关都卡住了。做证书和接口这块这种事,信服无限会把链路检查当成标准动作。做规划之前,告诉我你是什么场景下报的这个错。