public SslContextBuilder keyManager(PrivateKey key, String keyPassword, X509Certificate... keyCertChain) {
        if (forServer) {
            checkNotNull(keyCertChain, "keyCertChain required for servers");
            if (keyCertChain.length == 0) {
                throw new IllegalArgumentException("keyCertChain must be non-empty");
            }
            checkNotNull(key, "key required for servers");
        }
        if (keyCertChain == null || keyCertChain.length == 0) {
            this.keyCertChain = null;
        } else {
            for (X509Certificate cert: keyCertChain) {
                if (cert == null) {
                    throw new IllegalArgumentException("keyCertChain contains null entry");
                }
            }
            this.keyCertChain = keyCertChain.clone();
        }
        this.key = key;
        this.keyPassword = keyPassword;
        keyManagerFactory = null;
        return this;
    }
public SslContextBuilder keyManager ( PrivateKey key , String keyPassword , X509Certificate ... keyCertChain ) { if ( forServer ) { checkNotNull ( keyCertChain , "keyCertChain required for servers" ) ; if ( keyCertChain . length == 0 ) { throw new IllegalArgumentException ( "keyCertChain must be non-empty" ) ; } checkNotNull ( key , "key required for servers" ) ; } if ( keyCertChain == null || keyCertChain . length == 0 ) { this . keyCertChain = null ; } else { for ( X509Certificate cert : keyCertChain ) { if ( cert == null ) { throw new IllegalArgumentException ( "keyCertChain contains null entry" ) ; } } this . keyCertChain = keyCertChain . clone ( ) ; } this . key = key ; this . keyPassword = keyPassword ; keyManagerFactory = null ; return this ; }
Identifying certificate for this host. {@code keyCertChain} and {@code key} may
be {@code null} for client contexts, which disables mutual authentication.

@param key a PKCS#8 private key file
@param keyPassword the password of the {@code key}, or {@code null} if it's not
password-protected
@param keyCertChain an X.509 certificate chain