gpt4 book ai didi

java - SSL 身份验证在 Mule ESB 项目中不起作用(非法参数)

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:30 24 4
gpt4 key购买 nike

我写了一些代码,通过 SSL 在 HTTPS 服务器中进行身份验证。它工作正常。

现在我必须将这部分移动到我的 Mule ESB 项目中。

这是我的工作方法:

public boolean authenticate() {
try {
System.setProperty("jsse.enableSNIExtension", "false");
System.setProperty("com.sun.net.ssl.enableECC", "false");

CookieManager manager = new CookieManager();
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(manager);

URL url = new URL("https://...");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

con.setRequestMethod("GET");
con.setUseCaches(false);
con.setInstanceFollowRedirects(true);
con.setConnectTimeout(5000);
con.setReadTimeout(5000);

// KeyStore
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream("PATH/TO/.P12/file"), "P12password".toCharArray());
keyManagerFactory.init(keyStore, "P12password".toCharArray());
// ---

// TrustStore
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream("PATH/TO/.JKS/file"), "JKSpassword".toCharArray());
trustManagerFactory.init(trustStore);
// ---

SSLContext context = SSLContext.getInstance("SSLv3");
context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());

con.setSSLSocketFactory(context.getSocketFactory());

con.getContent();
CookieStore cookieJar = manager.getCookieStore();
List<HttpCookie> cookies = cookieJar.getCookies();
for (HttpCookie cookie: cookies) {
if (COOKIE_NAME.equals(cookie.getName())) {
COOKIE_VALUE = cookie.getValue();
return true;
}
}
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

在 Mule ESB 项目中,我在处理器中调用了authenticate:

@Override
public MuleEvent process(MuleEvent event) throws MuleException {
MuleMessage message = event.getMessage();

try {
String payloadString = new String(message.getPayloadAsBytes());
LOGGER.info("\nMessage payload:\n" + payloadString + "\n\n");

String xml = extractXMLFromSOAPMessage(payloadString);
LOGGER.info("\nXML: " + xml + "\n\n");

if (authenticate()) {
//send request to server
}
} catch (Exception e) {
LOGGER.error("EXCEPTION: " + e.getMessage());
e.printStackTrace();
}

return event;
}

在这一行 con.getContent(); 引发异常:SSLException: Received fatal alert: illegal_parameter

这个错误也出现在我的JAVA项目中。但添加这些参数有帮助:

System.setProperty("jsse.enableSNIExtension", "false");
System.setProperty("com.sun.net.ssl.enableECC", "false");

JAVA和Mule都在同一台机器上。

提前致谢!

附言对不起我的英语 (:


事实证明解决方案非常简单。

System.setProperty 在 Mule 项目中不起作用。

所以所有的JVM参数都可以在MULE_HOME/conf/wrapper.conf中配置。

这是我的解决方案:

wrapper.java.additional.16=-Djsse.enableSNIExtension=FALSE
wrapper.java.additional.17=-Dcom.sun.net.ssl.enableECC=FALSE

感谢 Vijay Pande

最佳答案

您是否尝试过按照 mule documentation 中的描述设置 JVM 参数? .

关于java - SSL 身份验证在 Mule ESB 项目中不起作用(非法参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com