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

use*_*892 2 java ssl

当我执行以下代码时:

KeyManagerFactory keyManagerFactory = KeyManagerFactory             
                .getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(null, null);
Run Code Online (Sandbox Code Playgroud)

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

Bru*_*uno 5

null用作keystore参数时KeyManagerFactory.init(..., ...),不使用密钥库(实际上它在内部使用空列表).

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

(请注意,虽然密钥库没有默认值,但是信任库存在一个默认值,因此默认值将与TrustManagerFactory.init(null).一起使用.)