code: 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;
      }
docs: 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