我正面临一个异常,告诉我“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)
有人可以介意解决这个问题吗?
答案 0 :(得分:1)
来自KeyManagerFactory.getDefaultAlgorithm
的文档:
可以通过设置
"ssl.KeyManagerFactory.algorithm"
安全属性的值(在Java安全属性文件中设置或通过调用Security.setProperty(java.lang.String, java.lang.String))
到所需的算法名称)在运行时更改默认算法。
所以有人 - 可能是你 - 将这个值设置为错误的值。密钥管理器应指出它处理的身份验证密钥和证书的类型。它不应表示对称密码。在TLS的身份验证阶段不使用对称密码(可能除非使用PSK密码套件)。
在我的系统上,算法返回SunX509
这是一个更明智的结果,X509是用于在TLS中执行常规客户端/服务器身份验证的证书。