当我尝试使用 Cordova 的 FileTransfer API 上传图像时,adb logcat
(在 Android 上测试)出现以下错误。服务器正在使用 TLS v1.2。
D/FileTransfer(26152): chunkedMode: true
D/FileTransfer(26152): headers: null
D/FileTransfer(26152): objectId: 5
D/FileTransfer(26152): httpMethod: POST
D/FileTransfer(26152): Content Length: 10467
W/FileTransfer(26152): Error getting HTTP status code from connection.
W/FileTransfer(26152): javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x7c1a8ae0: Failure in SSL library, usually a protocol error
W/FileTransfer(26152): error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x7278bd74:0x00000000)
W/FileTransfer(26152): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448)
W/FileTransfer(26152): at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:140)
W/FileTransfer(26152): at com.squareup.okhttp.Connection.connect(Connection.java:105)
W/FileTransfer(26152): at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
W/FileTransfer(26152): at com.squareup.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
W/FileTransfer(26152): at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
W/FileTransfer(26152): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:350)
W/FileTransfer(26152): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:90)
W/FileTransfer(26152): at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
W/FileTransfer(26152): at org.apache.cordova.filetransfer.FileTransfer$1.run(FileTransfer.java:382)
W/FileTransfer(26152): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/FileTransfer(26152): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/FileTransfer(26152): at java.lang.Thread.run(Thread.java:841)
W/FileTransfer(26152): Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x7c1a8ae0: Failure in SSL library, usually a protocol error
W/FileTransfer(26152): error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x7278bd74:0x00000000)
W/FileTransfer(26152): at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
W/FileTransfer(26152): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:405)
最佳答案
似乎必须为默认的 HTTPS 端口 443 设置 SSL 证书,并且该域必须可以在没有指定任何资源的情况下访问(https://example.com
必须可以访问,而不是只是一些 https://example.com/some-resource
)。
关于android - 上传到 TLS 环境时使用 Cordova 的 FileTransfer API 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28386169/