public SslContextBuilder keyManager(InputStream keyCertChainInputStream, InputStream keyInputStream,
            String keyPassword) {
        X509Certificate[] keyCertChain;
        PrivateKey key;
        try {
            keyCertChain = SslContext.toX509Certificates(keyCertChainInputStream);
        } catch (Exception e) {
            throw new IllegalArgumentException("Input stream not contain valid certificates.", e);
        }
        try {
            key = SslContext.toPrivateKey(keyInputStream, keyPassword);
        } catch (Exception e) {
            throw new IllegalArgumentException("Input stream does not contain valid private key.", e);
        }
        return keyManager(key, keyPassword, keyCertChain);
    }
public SslContextBuilder keyManager ( InputStream keyCertChainInputStream , InputStream keyInputStream , String keyPassword ) { X509Certificate [ ] keyCertChain ; PrivateKey key ; try { keyCertChain = SslContext . toX509Certificates ( keyCertChainInputStream ) ; } catch ( Exception e ) { throw new IllegalArgumentException ( "Input stream not contain valid certificates." , e ) ; } try { key = SslContext . toPrivateKey ( keyInputStream , keyPassword ) ; } catch ( Exception e ) { throw new IllegalArgumentException ( "Input stream does not contain valid private key." , e ) ; } return keyManager ( key , keyPassword , keyCertChain ) ; }
Identifying certificate for this host. {@code keyCertChainInputStream} and {@code keyInputStream} may
be {@code null} for client contexts, which disables mutual authentication.

@param keyCertChainInputStream an input stream for an X.509 certificate chain in PEM format
@param keyInputStream an input stream for a PKCS#8 private key in PEM format
@param keyPassword the password of the {@code keyInputStream}, or {@code null} if it's not
password-protected