Android OkHttp TLS相互验证-客户端不';无法将证书发送到服务器
我需要一些关于Android OkHttp客户端/服务器应用程序的帮助。问题如下:我的Android客户端似乎在收到证书请求后没有向服务器发送任何证书。 以下是我的Android代码:Android OkHttp TLS相互验证-客户端不';无法将证书发送到服务器,android,ssl,grpc,okhttp,tls1.2,Android,Ssl,Grpc,Okhttp,Tls1.2,我需要一些关于Android OkHttp客户端/服务器应用程序的帮助。问题如下:我的Android客户端似乎在收到证书请求后没有向服务器发送任何证书。 以下是我的Android代码: private static SSLContext getContext(InputStream keystoreInputStream){ SSLContext sslContext = null; try{ //========== try {
private static SSLContext getContext(InputStream keystoreInputStream){
SSLContext sslContext = null;
try{
//==========
try {
// The keystore contains the CA cert and the Client cert
KeyStore keyStore = KeyStore.getInstance("PKCS12");
try {
keyStore.load(keystoreInputStream, "MYPASS".toCharArray());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ksIn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
sslContext = SSLContext.getInstance("TLS");
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");
keyManagerFactory.init(keyStore, "MYPASS".toCharArray());
sslContext.init(keyManagerFactory.getKeyManagers(), tmf.getTrustManagers(), null);
} catch (Exception e) {
e.printStackTrace();
}
//==========
}catch (Exception e){
}
return sslContext;
}
这是Android客户端(192.168.1.72)和服务器(192.168.1.79)之间的wireshark会话:
如您所见,服务器发送证书请求,但客户端发送长度为0的证书。你能解释一下我该怎么解决这个问题吗?谢谢。首先,使用类似URL的URL尝试现有设置。它应该打印出您发送的客户端证书 其次,您可以自己实现一个KeyManager,并查看发生了什么,即使它只是装饰了Android KeyManager并记录了调用
最后,您可以在JDK上进行比较。在这个场景中,您可以启用SSL日志来查看发生了什么,但不要期望JSSE和Android的Conscrypt提供程序之间有相同的行为。我最终发现问题出在我的密钥库和信任库文件中,它们只是格式不正确。 我只是试着用这些简单的段落来重建它们:
openssl pkcs12-export-in-out.pkcs12-name,我把它放在这里,因为我发现它干净易懂。如果你测试,你会得到什么响应?刚刚解决,如果你想看看,我发布了一个响应,谢谢!