我遇到(继承)以下代码:
String ksType = KeyStore.getDefaultType();
KeyStore ks = KeyStore.getInstance(ksType);
ks.load(null, null);
SSLSocketFactory sockFactory = new SSLSocketFactory(ks);
我对KeyStore
load
方法的调用感到困惑。此代码使用什么密钥库?我查看了 KeyStore 文档,据我所知这是合法的。
但是,代码不起作用。该应用程序需要一个 URL 供服务器连接。该应用程序会引发javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
错误 - 即使该站点具有有效的 SSL 证书。
调试时,我添加了以下行:
Log.v(TAG,"ks has " + String.valueOf(ks.size()) + " entries.");
获取密钥库中的项目数。它返回零。
我觉得我严重误解了 KeyStores 的一些东西。
这段代码应该工作吗?它应该做什么?
编辑
根据代码的使用方式(对网站进行身份验证),我相信它被用作信任库,而不是密钥库。SSLSocketFactory
正在使用的org.apache.http.conn.ssl
. 查看应用程序的资源,应用程序中似乎没有包含密钥库文件。令我费解。