当我执行以下代码时:
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?
答案 0 :(得分:5)
当null
用作KeyManagerFactory.init(..., ...)
的密钥库参数时,不使用密钥库(事实上它在内部使用an empty list)。
没有“隐藏”NullPointerException
这样,并且没有理由为什么应该有一个。当然,在此处使用null
值和空集合会在尝试使用密钥管理器时产生影响,但并非所有SSL / TLS连接都需要密钥库(例如,客户端没有客户端证书或匿名密码套件)。 / p>
(请注意,尽管密钥库没有默认值there is one for the truststore,因此默认值将与TrustManagerFactory.init(null)
一起使用。)