将null传递给Java中的KeyManagerFactory.init()时使用哪个密钥库?

时间:2015-07-08 12:12:43

标签: java ssl

当我执行以下代码时:

KeyManagerFactory keyManagerFactory = KeyManagerFactory             
                .getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(null, null);

然后随后建立ssl连接,我得到一个Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure而不是NullPointerException等。那么使用哪个密钥库?或者隐藏了NPE?

1 个答案:

答案 0 :(得分:5)

null用作KeyManagerFactory.init(..., ...)的密钥库参数时,不使用密钥库(事实上它在内部使用an empty list)。

没有“隐藏”NullPointerException这样,并且没有理由为什么应该有一个。当然,在此处使用null值和空集合会在尝试使用密钥管理器时产生影响,但并非所有SSL / TLS连接都需要密钥库(例如,客户端没有客户端证书或匿名密码套件)。 / p>

(请注意,尽管密钥库没有默认值there is one for the truststore,因此默认值将与TrustManagerFactory.init(null)一起使用。)