开发者社区 问答 正文

oss HTTPS上传图片遇到的问题

我们用的是自定义的endpoint,http的时候可以上传,但是改到HTTPS就报错,ssl之类的, 和read only 什么的错误 java.io.FileNotFoundException: /jacoco.exec (Read-only file system) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:308) at java.io.FileOutputStream. (FileOutputStream.java:238) at org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.openFile(FileOutput.java:67) at org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.startup(FileOutput.java:49) at org.jacoco.agent.rt.internal_8ff85ea.Agent.startup(Agent.java:122) at org.jacoco.agent.rt.internal_8ff85ea.Agent.getInstance(Agent.java:50) at org.jacoco.agent.rt.internal_8ff85ea.Offline. (Offline.java:31) at org.jacoco.agent.rt.internal_8ff85ea.Offline.getProbes(Offline.java:51) at com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider.$jacocoInit(Unknown Source:13) at com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider. (Unknown Source:0)

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:229) at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:319) at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:283) at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:168) at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257) at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135) at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254) at okhttp3.RealCall.execute(RealCall.java:92)

展开
收起
游客hexxhlwhoalvo 2019-11-30 10:40:25 2253 分享 版权
阿里云 AI 助理回答

从您提供的错误信息来看,问题主要涉及两个方面:SSL握手失败和文件系统只读错误。下面我将分别针对这两个问题提供可能的解决方案。

SSL握手失败

错误信息中提到的javax.net.ssl.SSLHandshakeException表明在尝试建立HTTPS连接时,由于证书验证问题导致SSL握手失败。具体原因是“Trust anchor for certification path not found”,即信任锚点未找到,这通常意味着客户端不信任服务端的SSL证书。

解决方法:

  1. 检查服务器证书:确保您的HTTPS endpoint使用的SSL证书是由受信任的CA(证书颁发机构)签发的,并且该证书的有效期、域名匹配等都正确无误。

  2. 导入证书到信任库:如果您的应用需要访问自签名证书或内部CA签发的证书,需要将该CA的根证书或整个证书链添加到Android的信任库中。可以参考Android官方文档了解如何处理这种情况。

  3. 配置OkHttp以接受特定证书:如果您无法修改应用的信任库,可以在OkHttp客户端配置中添加一个自定义的TrustManager来接受特定的证书。但请注意,这种方法会降低安全性,仅建议在测试环境或有特殊需求的情况下使用。

文件系统只读错误

另一个问题是关于java.io.FileNotFoundException: /jacoco.exec (Read-only file system),这表示应用程序试图写入/jacoco.exec文件时遇到只读文件系统的限制。

解决方法:

  1. 更改输出路径:由于系统目录可能是只读的,您可以考虑将文件输出路径更改为应用私有目录或其他可写目录。例如,可以使用Context.getFilesDir()Context.getExternalFilesDir(null)获取可写的私有目录路径。

  2. 检查运行环境权限:虽然这个问题看起来与权限无关,但确认应用是否拥有必要的存储权限也是个好习惯。对于Android 6.0及以上版本,即使写入私有目录也需要在运行时请求存储权限。

综上所述,首先解决SSL证书信任问题以确保HTTPS连接成功,同时调整文件输出路径以避免只读文件系统的问题。希望这些建议能帮助您解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答