Java Camel SSL验证报错:密钥库密码不正确
问题排查与代码修复方案
问题根源
所有设置密码的位置都错误使用了Arrays.toString(PASSWORD.toCharArray())方法,该方法会把字符数组转换成[p,a,s,s,w,o,r,d]这类格式的字符串,而非原始的密码字符串"password",直接导致密钥库验证时密码不匹配,触发keystore password was incorrect错误。
修复后的可运行代码
package org.example; import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.model.rest.RestBindingMode; import org.apache.camel.support.jsse.KeyManagersParameters; import org.apache.camel.support.jsse.KeyStoreParameters; import org.apache.camel.support.jsse.SSLContextParameters; import org.apache.camel.component.jetty.JettyHttpComponent; public class CamelRestHttpsExample { public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); String PASSWORD = "password"; KeyStoreParameters keyStoreParameters = new KeyStoreParameters(); keyStoreParameters.setType("PKCS12"); keyStoreParameters.setResource("ssl_key.p12");// 替换为你的密钥库路径 keyStoreParameters.setPassword(PASSWORD); // 直接使用原始密码字符串 KeyManagersParameters keyManagersParameters = new KeyManagersParameters(); keyManagersParameters.setKeyStore(keyStoreParameters); SSLContextParameters sslContextParameters = new SSLContextParameters(); sslContextParameters.setKeyManagers(keyManagersParameters); JettyHttpComponent jettyComponent = context.getComponent("jetty", JettyHttpComponent.class); jettyComponent.setSslContextParameters(sslContextParameters); jettyComponent.setSslKeyPassword(PASSWORD); jettyComponent.setSslPassword(PASSWORD); jettyComponent.setKeystore("ssl_key.p12"); context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { restConfiguration() .component("jetty") .scheme("https") .host("127.0.0.1") .port(8443) .bindingMode(RestBindingMode.auto) .dataFormatProperty("prettyPrint", "true") .contextPath("/api") .endpointProperty("sslKeystore", "ssl_key.p12") .endpointProperty("sslPassword", PASSWORD) .endpointProperty("sslKeyPassword", PASSWORD); rest("/hello") .get() .route() .transform().constant("Hello from Camel over HTTPS!") .endRest(); } }); context.start(); System.out.println("Camel上下文已启动。访问服务:https://localhost:8443/api/hello"); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { context.stop(); } catch (Exception e) { e.printStackTrace(); } })); } }
关键修改点
- 移除所有
Arrays.toString(PASSWORD.toCharArray())调用,直接使用原始字符串PASSWORD作为密码参数 - 确保密钥库文件
ssl_key.p12存在于项目类路径下,或使用绝对路径指定位置
额外验证建议
- 验证密钥库密码正确性,执行以下命令:
keytool -list -keystore ssl_key.p12 -storetype PKCS12
输入密码后若能正常列出密钥库内容,说明密码无误。
- 若自行生成密钥库,确保生成时密码与代码一致,示例生成命令:
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore ssl_key.p12 -storepass password -keypass password
内容的提问来源于stack exchange,提问作者Pasindu Ukwatta
相关产品推荐
相关产品推荐

