我试图在这里为我寻找一些答案,但是我找不到解决我问题的任何方法。
在项目中,我正在努力更改域名。更改有些棘手-我们还必须将连接从HTTP更改为HTTPS。我已经收到.crt密钥(比方说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%的代码就像在第二个链接中一样,只有很小的变化)。
最佳答案
将此话题视为通信不佳的示例。经过数小时的尝试,我们开始工作:
我们不使用自签名证书,因此向应用程序添加密钥是一个糟糕的主意(因为它们每3个月更改一次)
不支持的协议异常来自较旧的Android API(
关于android - Volley 库和HTTPS请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42137828/