月度存档: 11 月 2020

unity下ssl证书验证失败

“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.

记下谷歌支付失败的相关情况

consumeValue

支付可能的失败原因:

1、未安装谷歌服务框架(google services framework)

2、当前使用的谷歌帐号所在地区未开放付费

3、谷歌框架服务无法正常访问网络

4、谷歌服务框架 “后台弹权权限” 未开启。(注:这个权限国外手机是不可见,默认开启。 出现这个错误,仅限在Oppo,Vivo,Xiaomi等国内品牌手机,需要手动打开此权限)

5、上一次支付成功的订单尚未消单(consume purchase)。 (注:需要完成消单后同支付档位才可再次支付。短时间内多次支付同档位礼包比较容易出现)

6、手机上存在多谷歌帐号时,支付会优先使用安装此APP的帐号进行支付,如果该谷歌帐号所在地区无支付权限,则APP无法支付。(注:出现该问题时,需要先删除APP,从系统中退出安装此APP的帐号。然后重新安装APP即可支付)。

7、不是从google play下载安装,该种情况下无法支付。