使用null InputStream和密码加载密钥库?

时间:2012-11-13 20:26:32

标签: android ssl keystore

我遇到(继承)以下代码:

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。查看应用程序的资源,应用程序中似乎没有包含密钥库文件。让我感到困惑。

1 个答案:

答案 0 :(得分:1)

如果它被用作密钥库,它可能会起作用,但是'null'也是如此。如果它被用作信任库,它将无法工作。你可以发布被调用的SSLSocketFactory的构造函数吗?

编辑:任何SSL客户端都需要非空信任库才是安全的。 Java提供的版本足以满足大多数用途。