You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:36:00