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