AES KeyManagerFactory不可用

时间:2015-07-24 09:54:27

标签: java security ssl cryptography

我正面临一个异常,告诉我“AES KeyManagerFactory不可用”。

这是我的代码:

try {
    LOG.warn("Configuring SSL connection on port 8085");
    KeyStore keystore = KeyStore.getInstance("JCEKS");
    keystore.load(new FileInputStream("/.peg.jceks"),
            "password".toCharArray());

    KeyStore kstrust = KeyStore.getInstance("JCEKS");
    String truststorelocation = "/.peg.jceks";
    kstrust.load(new FileInputStream(truststorelocation), "changeit".toCharArray());

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(keystore, "password".toCharArray());

    TrustManagerFactory tmf =
            TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(kstrust);

    context = SSLContext.getInstance("TLS");
    context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
    SSLServerSocketFactory sf = context.getServerSocketFactory();
    SSLServerSocket ss = (SSLServerSocket)sf.createServerSocket(8085);
    ss.setNeedClientAuth(true);

} catch (Exception e) {
    e.printStackTrace();
    LOG.error("Problem configuring SSL", e.getMessage());
}

我正面临这个例外

java.security.NoSuchAlgorithmException: AES KeyManagerFactory not available
     at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
     at javax.net.ssl.KeyManagerFactory.getInstance(KeyManagerFactory.java:10)

有人可以介意解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

来自KeyManagerFactory.getDefaultAlgorithm的文档:

  

可以通过设置"ssl.KeyManagerFactory.algorithm"安全属性的值(在Java安全属性文件中设置或通过调用Security.setProperty(java.lang.String, java.lang.String))到所需的算法名称)在运行时更改默认算法。

所以有人 - 可能是你 - 将这个值设置为错误的值。密钥管理器应指出它处理的身份验证密钥和证书的类型。它不应表示对称密码。在TLS的身份验证阶段不使用对称密码(可能除非使用PSK密码套件)。

在我的系统上,算法返回SunX509这是一个更明智的结果,X509是用于在TLS中执行常规客户端/服务器身份验证的证书。