“System.IO.IOException: The authentication or decryption has failed. —> Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.\r\n at Mono.Security.Protocol.Tls.RecordProtocol.ProcessAlert (AlertLevel alertLevel, AlertDescription alertDesc) [0x00000] in :0 \r\n at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in :0 \r\n — End of inner exception stack trace —\r\n at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in :0 “
线上正在跑的一个项目,突然出现如上的错误。很久之前我就知道了,unity中可以强制设置为不验证ssl证书,但我好奇的是,这个是线上正在跑的项目,SSL证书也没有出现更换的情况,为什么突然间就验证失败了。
一开始猜测会不会是证书本身的问题,用了几个检测SSL证书网站进行检测,结果正常。
和运维排查了一下午没找到原因。这个地方请求失败对客户端目前并无大影响,后续准备修改代码避免这个检测。
周一来公司时,又对这个事比较好奇了,决定再重新理一下头绪,看是不是漏了什么线索没有发现。从头开始重新一步一步推测。
在检测SSL证书时,突然发现证书只支持TLS1.2

这里出现了一丝疑惑,难道配的证书不支持TLS1.0/1.1,又找到几个检测工具测试了,也显示不支持TLS1.0/1.1。
找到公司里另一个支持TLS1.0/1.1的域名进行测试,可以成功访问。
将这个情况反馈给运维,运维同学才想到,前一段时间将运行环境容器化,容器默认只开启了TLS1.2。
修改为支持TLS1.0/1.1后,线上问题解决,不用重新发包了.yeah.
近期评论