jooby/src/main/java/org/jooby/internal/ssl/JdkSslContext.java
protected static KeyManagerFactory buildKeyManagerFactory(final File certChainFile,
      final File keyFile, final String keyPassword)
          throws UnrecoverableKeyException, KeyStoreException, NoSuchAlgorithmException,
          NoSuchPaddingException, InvalidKeySpecException, InvalidAlgorithmParameterException,
          CertificateException, KeyException, IOException {
    String algorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
    if (algorithm == null) {
      algorithm = "SunX509";
    }
    return buildKeyManagerFactory(certChainFile, algorithm, keyFile, keyPassword);
  }
protected static KeyManagerFactory buildKeyManagerFactory(final File certChainFile,
      final File keyFile, final String keyPassword)
          throws UnrecoverableKeyException, KeyStoreException, NoSuchAlgorithmException,
          NoSuchPaddingException, InvalidKeySpecException, InvalidAlgorithmParameterException,
          CertificateException, KeyException, IOException {
    String algorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
    if (algorithm == null) {
      algorithm = "SunX509";
    }
    return buildKeyManagerFactory(certChainFile, algorithm, keyFile, keyPassword);
  }
Build a {@link KeyManagerFactory} based upon a key file, key file password, and a certificate
chain.

@param certChainFile a X.509 certificate chain file in PEM format
@param keyFile a PKCS#8 private key file in PEM format
@param keyPassword the password of the {@code keyFile}.
{@code null} if it's not password-protected.
@param kmf The existing {@link KeyManagerFactory} that will be used if not {@code null}
@return A {@link KeyManagerFactory} based upon a key file, key file password, and a certificate
chain.