android - Volley 库和 HTTPS 请求

标签 android ssl https android-volley

我试图在这里为我寻找一些答案,但我就是找不到任何能解决我问题的东西。

在我正在进行的项目中,我们将更改我们的域。更改有点棘手 - 我们还必须将连接从 HTTP 更改为 HTTPS。我收到了 .crt key (比方说,example.tech.crt - 会将所有公司名称更改为“example”)。经过几个小时的不断失败,我决定写在这里。

首先,我尝试使用本教程 http://ogrelab.ikratko.com/using-android-volley-with-self-signed-certificate/ - 它没有用(我什至不是说我因为 API23 而不得不使用已弃用的 Apache 库)。如果需要,这就是我创建 BKS 文件的方式:

keytool -importcert -v -trustcacerts -file "example.tech.crt" -alias example_tech
        -keystore "example_tech.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider
        -providerpath "bcprov-jdk16-146.jar" -storetype BKS

然后,我尝试了这种方法Does Android Volley support SSL? - 最佳答案之一(忽略域名检查)。我仍然尝试使用 BKS 文件 - 我有一些关于转换错误的异常,所以我更改了行:

CertificateFactory cf = CertificateFactory.getInstance("X.509");

CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");

如某处所建议 - 错误仍然存​​在。我尝试使用 .crt 文件而不是 BKS - 我仍然失败。

每次我都遇到同样的错误:

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: 
SSL handshake aborted: ssl=0x650f83a0: Failure in SSL library, usually a protocol error
error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol 
(external/openssl/ssl/s23_clnt.c:714 0x5fda0d74:0x00000000)

我尝试使用 Postman 执行几乎相同的请求,它们在相同的地址上工作没有任何问题,所以这不是服务器问题。我尝试使用各种域 - example.tech、www.example.tech、example.tech:80 等等(当然总是使用 https)。

下面是类似 curl 的请求示例(当然是经过审查的):

curl request: curl -X "POST"
 -D "grant_type=password&password=[passwordHere]&username=[emailHere]&"
 -H 'Authorization: Basic [tokenHere]
 "https://example.tech/oauth/token"

我看不出我的代码有什么问题,我很高兴看到我在这里做错了什么。如果需要更多代码,请随时提出要求(但 99% 的代码与第二个链接中的一样,只有非常小的更改)。

最佳答案

将此主题视为沟通不畅的示例。经过几个小时的努力,我们开始工作:

  • 我们不使用自签名证书,因此将 key 添加到应用程序是个糟糕的主意(因为它们每 3 个月更改一次)
  • 不支持的协议(protocol)异常来自较旧的 Android API(<20 或 <21),但此应用程序支持这些 API。据我所知(考虑到我对 SSL 连接知之甚少)我们的网站使用 TLS,但较旧的 Android 系统(我猜是 Lollipop 之前的系统)默认情况下已将其关闭。解决此问题的正确方法是创建自定义 TLSSocketFactory 并在用于初始化 RequestQueue 的 HurlStack 中使用它。异常消失后。

关于android - Volley 库和 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42137828/

相关文章:

android - 如何反转Android中列表的顺序?

apache - 如何为 Apache httpd 安装 mod_ssl?

android - 与 .apply 一起使用时,修饰符不起作用

javascript - Android WebView 发送 base64 url​​ 到 Javascript(拒绝加载 URL,因为它超过了 X 个字符。)

python - 为什么 SSLSocket,套接字的子类型,缺少 create_connection 方法?

apache - 如何禁用 Owncloud https 重定向?

fonts - Chrome 上 HTTPS 页面上的 Google 网络字体

node.js - 如何修复 : "EPROTO" Error after upgrading Node's version

Java:从 Windows-MY 证书(不可导出)获取私钥以将其用于 SSL 身份验证

android - 在android中获取我的电话号码