我遇到一个异常,告诉我“ 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)


谁能解决这个问题?

最佳答案

KeyManagerFactory.getDefaultAlgorithm的文档中:


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


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

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

关于java - AES KeyManagerFactory不可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31607482/

10-10 10:34