排球库和HTTPS请求

时间:2017-02-09 13:19:52

标签: android ssl https android-volley

我试着在这里寻找一些答案,但我找不到能解决问题的任何事情。

在我正在开展的项目中,我们将改变我们的域名。改变有点棘手 - 我们还必须改变从HTTP到HTTPS的连接。我已收到.crt密钥(比如说,example.tech.crt - 将所有公司名称更改为"示例")。经过几个小时的不断失败,我决定写在这里。

首先,我尝试使用本教程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 request: curl -X "POST"
 -D "grant_type=password&password=[passwordHere]&username=[emailHere]&"
 -H 'Authorization: Basic [tokenHere]
 "https://example.tech/oauth/token"

我没有看到我的代码出了什么问题,而且我很高兴看到我在这里做错了什么。如果还需要更多代码,请随时提出要求(但99%的代码就像在第二个链接中,只有很小的变化)。

1 个答案:

答案 0 :(得分:0)

将此主题视为糟糕通信的示例。经过几个小时的尝试,我们开始工作:

  • 我们不使用自签名证书,因此向应用程序添加密钥是一个糟糕的想法(因为它们每3个月更改一次)
  • 不支持的协议异常来自较旧的Android API(< 20或< 21),这些API在此应用程序中受支持。从我的理解(考虑到我对SSL连接的了解不足)我们的网站使用TLS,但是较旧的Android系统(我猜之前的Lollipop)默认关闭。解决这个问题的正确方法是创建自定义TLSSocketFactory并在HurlStack中使用它来初始化RequestQueue。在那个例外消失之后。