我对android的ssl中使用的证书感到非常困惑。通常,应该使用ca.crt(ca证书)来验证客户端中的server.crt(certificate)。但是,似乎在Android上使用ssl时ca.crt和server.crt都可以工作。真奇怪有人可以解释会发生什么情况吗?
先谢谢了。
如下面的代码所示,我可以使用ca.crt或server.crt来构建client.bks。他们两个都可以成功连接到服务器。顺便说一句,在与其他信息一起在服务器端重建server.crt之后,我只能使用ca.crt连接服务器。
KeyStore trustKeyStore = KeyStore.getInstance("BKS");
InputStream keyStream = xxxApplication.getInstance().getassets().open("client.bks");
trustKeyStore.load(keyStream,"".toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustKeyStore);
sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null,trustManagerFactory.getTrustManagers(),null);
以另一种方式,我想知道android中的SSL如何通过TrustManagers验证服务器证书。我们将用于构建trustManager的证书称为“ client.crt”。似乎下面的代码允许服务器证书(证书client.crt和可以由client.crt验证的证书)。