【问题标题】:Load Keystore with null InputStream and password?使用 null InputStream 和密码加载 Keystore?
【发布时间】:2012-11-02 07:44:34
【问题描述】:

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

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 有严重误解。

这段代码应该工作吗?它应该做什么?

编辑 根据代码的使用方式(验证网站),我相信它被用作信任库,而不是密钥库。从org.apache.http.conn.ssl 使用的SSLSocketFactory。查看应用程序的资源,应用程序中似乎没有包含密钥库文件。让我很困惑。

【问题讨论】:

  • @EJP 更新了问题以包括如何不起作用。

标签: android ssl keystore


【解决方案1】:

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

编辑:任何 SSL 客户端都需要一个非空的信任库才能确保安全。随 Java 提供的那个对于大多数用途来说已经足够了。

【讨论】:

  • 我的调试代码显示我有一个空的信任库。如何告诉代码使用 Java 提供的一个?
猜你喜欢
  • 1970-01-01
  • 2023-02-02
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2018-05-18
相关资源
最近更新 更多