记录一次解决的由ssl证书带来的问题,以及解决历程。
问题的产生的原因是这样的,客户想给项目迁移服务器。也是按照之前服务器的配置方式,tomcat、jdk、nginx、maven等等也是用过 scp命令进行同步的,因为用scp命令能保证 文件的权限也不会变。客户这面也提供了 https的ssl证书,一切都准备就绪了,部署完也都可以正常访问。看起来一切都是那么顺利。
紧接着就是跟 项目的第三方百世仓进行测试联调,结果出现了问题,百世仓通过https访问我们服务器的接口出现了超时的情况,于是我自己用postman进行测试,结果发现接口是可以请求通的,就断定不是自己的问题,毕竟工具都能访问通,百世仓请求不过来就是他们的问题喽,于是就配合他们调试,然后就通过nginx的日志发现,根本就没有收到来自于百世仓的请求,然后百世仓换成了http请求,服务器返回了301,因为客户要求必须使用https来进行访问,所以只能通过nginx 来处理,拦截到http给转成https,如图
因为接口的请求参数比较多,是通过post请求来进行 访问的。 通过和百世仓联调竟然发现他们发送的post请求竟然转成get请求了。如下图,所以想通过http访问的方案也被pass掉了。
于是我就是开始模仿百世仓的请求方式(org.springframework.web.client.RestTemplate)结果发现了报错,大致意思就是服务端的ssl证书无法验证。于是就定位到 大致的问题方向是 ssl证书的问题。
这个时候就在好奇为什么postman可以访问,百世仓就不行呢。于是就从postman下手,结果发现postman有个配置让我无意间关掉了。这个配置可以跳过ssl证书验证。当我打开ssl验证的时候就出现了标题的错误提示(SSL Error: Unable to verify the first certificate)顿时就麻了,也就说通了为什么百世仓调用不通。因为他们对ssl进行验证了。
原来的服务器的域名是www 的三级域名,新域名就是去掉了前面的www,就是所谓的二级域名。 于是就考虑把www服务器下的证书给迁移到新服务器上做个尝试,结果一试还真的好使。也最终定位到了是证书的问题。于是我就跟提供证书的开发人员证实这个问题。一开始呢他给我提供了一个压缩文件,解压后有两个文件(.cer 和 .key)一个是证书文件一个是密钥文件。 也是自己对ssl了解甚少,在centos上通过 openssl 将 cer 转成了pem。 结果那兄弟告诉,不需要通过openssl来处理,只需要将cer后缀改成pem就行,听完这个消息大无语。于是赶忙更换了证书, 至此问题解决。