Apache Camel-Http und SSL

Habe ich versucht, eine 2-Wege-ssl/https-proxy arbeitet mit Kamel. Ich war in der Lage, die Jetty-Komponente mit 2-Wege-ssl und bin jetzt versucht, um es arbeiten mit dem Http4-Komponente zur Vervollständigung der client-Seite des proxy.

Wenn ich die route Steg-Verkehr, um eine log-Komponente, alles ist gut und der 2-Wege-ssl-trust-Kette ist in Ordnung. Wenn ich werfen in das Http4 Komponente, es explodiert mit einem peer nicht authentifiziert Ausnahme. Ich bin mit Camel 2.7.0

Hier ist was ich bisher

public static void main(String[] args) throws Exception {
    CamelContext context = new DefaultCamelContext();

    JettyHttpComponent jetty = context.getComponent("jetty", JettyHttpComponent.class);

    SslSelectChannelConnector sslConnector = new SslSelectChannelConnector();
    sslConnector.setPort(9443);
    sslConnector.setKeystore("/home/brian/jboss.keystore");
    sslConnector.setKeyPassword("changeit");
    sslConnector.setTruststore("/home/brian/jboss.truststore");
    sslConnector.setTrustPassword("changeit");
    sslConnector.setPassword("changeit");
    sslConnector.setNeedClientAuth(true);

    Map<Integer, SslSelectChannelConnector> connectors = new HashMap<Integer, SslSelectChannelConnector>();
    connectors.put(9443, sslConnector);

    jetty.setSslSocketConnectors(connectors);

    final Endpoint jettyEndpoint = jetty.createEndpoint("jetty:https://localhost:9443/service");

    KeyStore keystore = KeyStore.getInstance("PKCS12");
    keystore.load(new FileInputStream(new File("/home/brian/User2.p12")), "Password1234!".toCharArray());
    X509KeyManager keyManager = new CTSKeyManager(keystore, "user2", "Password1234!".toCharArray());
    KeyManager[] keyManagers = new KeyManager[] { keyManager };

    X509TrustManager trustManager = new EasyTrustManager();
    TrustManager[] trustManagers = new TrustManager[] { trustManager };

    SSLContext sslcontext = SSLContext.getInstance("TLS");
    sslcontext.init(keyManagers, trustManagers, null);

    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("https", 443, new SSLSocketFactory(sslcontext,
            SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)));

    HttpComponent http4 = context.getComponent("http4", HttpComponent.class);
    http4.setClientConnectionManager(new ThreadSafeClientConnManager(registry));
    final Endpoint https4Endpoint = http4
            .createEndpoint("https4://soafa-lite-staging:443/axis2/services/SigActService?bridgeEndpoint=true&throwExceptionOnFailure=false");
    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() {
            from(jettyEndpoint).to(https4Endpoint);
        }
    });

    context.start();

    context.stop();
}

private static class EasyTrustManager implements X509TrustManager {

    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

};

private static class CTSKeyManager extends X509ExtendedKeyManager {
    private final KeyStore keystore;
    private final char[] privateKeyPassword;
    private final String privateKeyAlias;

    public CTSKeyManager(KeyStore keystore, String privateKeyAlias, char[] privateKeyPassword) {
        this.keystore = keystore;
        this.privateKeyAlias = privateKeyAlias;
        this.privateKeyPassword = privateKeyPassword;
    }

    @Override
    public String[] getServerAliases(String keyType, Principal[] issuers) {
        String[] serverAliases = null;
        try {
            List<String> aliasList = new ArrayList<String>();
            int count = 0;
            Enumeration<String> aliases = keystore.aliases();
            while (aliases.hasMoreElements()) {
                String alias = aliases.nextElement();
                aliasList.add(alias);
                count++;
            }
            serverAliases = aliasList.toArray(new String[count]);
        } catch (Exception e) {
        }
        return serverAliases;
    }

    @Override
    public PrivateKey getPrivateKey(String alias) {
        PrivateKey privateKey = null;
        try {
            privateKey = (PrivateKey) keystore.getKey(alias, privateKeyPassword);
        } catch (Exception e) {
        }
        return privateKey;
    }

    @Override
    public String[] getClientAliases(String keyType, Principal[] issuers) {
        return privateKeyAlias == null ? null : new String[] { privateKeyAlias };
    }

    @Override
    public X509Certificate[] getCertificateChain(String alias) {
        X509Certificate[] x509 = null;
        try {
            Certificate[] certs = keystore.getCertificateChain(alias);
            if (certs == null || certs.length == 0) {
                return null;
            }
            x509 = new X509Certificate[certs.length];
            for (int i = 0; i < certs.length; i++) {
                x509[i] = (X509Certificate) certs[i];
            }
        } catch (Exception e) {
        }
        return x509;
    }

    @Override
    public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket) {
        return privateKeyAlias;
    }

    @Override
    public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) {
        return privateKeyAlias;
    }

    @Override
    public String chooseEngineClientAlias(String[] keyType, Principal[] issuers, SSLEngine engine) {
        return privateKeyAlias;
    }

    @Override
    public String chooseEngineServerAlias(String keyType, Principal[] issuers, SSLEngine engine) {
        return privateKeyAlias;
    }
}

}

Soweit ich sagen kann, das Vertrauen sollte in Ordnung sein, zwischen allen keystores/truststores verwendet, die auf beiden Seiten des proxy-verbindungen.

Hier ist mein stack trace

[ qtp25584663-14] HttpProducer DEBUG Ausführen von http-POST-Methode: https4://soafa-lite-staging:443/axis2/services/SigActService?bridgeEndpoint=true&throwExceptionOnFailure=false 
[ qtp25584663-14] DefaultErrorHandler DEBUG Fehlgeschlagen Lieferung für exchangeId: ID-ubuntu-46528-1303140195358-0-1. Auf Zustellversuch: 0 gefangen: javax.net.ssl.SSLPeerUnverifiedException: peer nicht authentifiziert 
[ qtp25584663-14] DefaultErrorHandler FEHLER Fehlgeschlagen Lieferung für exchangeId: ID-ubuntu-46528-1303140195358-0-1. Erschöpft nach einem Zustellversuch: 1 gefangen: javax.net.ssl.SSLPeerUnverifiedException: peer nicht authentifiziert 
javax.net.ssl.SSLPeerUnverifiedException: peer nicht authentifiziert 
bei com.Sonne.net.ssl.intern.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352) 
bei org.apache.http.conn.ssl.AbstractVerifier.überprüfen Sie(AbstractVerifier.java:128) 
bei org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) 
bei org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) 
bei org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
bei org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) 
bei org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561) 
bei org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
bei org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
bei org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) 
bei org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) 
bei org.apache.camel.Komponente.http4.HttpProducer.executeMethod(HttpProducer.java:187) 
bei org.apache.camel.Komponente.http4.HttpProducer.Prozess(HttpProducer.java:101) 
bei org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50) 
bei org.apache.camel.util.AsyncProcessorHelper.Prozess(AsyncProcessorHelper.java:77) 
bei org.apache.camel.Prozessor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:104) 
bei org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:272) 
bei org.apache.camel.Prozessor.SendProcessor.Prozess(SendProcessor.java:98) 
bei org.apache.camel.util.AsyncProcessorHelper.Prozess(AsyncProcessorHelper.java:77) 
bei org.apache.camel.Prozessor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) 
bei org.apache.camel.Prozessor.DelegateAsyncProcessor.Prozess(DelegateAsyncProcessor.java:89) 
bei org.apache.camel.Prozessor.interceptor.TraceInterceptor.Prozess(TraceInterceptor.java:99) 
bei org.apache.camel.util.AsyncProcessorHelper.Prozess(AsyncProcessorHelper.java:77) 
bei org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:299) 
bei org.apache.camel.Prozessor.RedeliveryErrorHandler.Prozess(RedeliveryErrorHandler.java:208) 
bei org.apache.camel.Prozessor.DefaultChannel.Prozess(DefaultChannel.java:269) 
bei org.apache.camel.Prozessor.UnitOfWorkProcessor.Prozess(UnitOfWorkProcessor.java:109) 
bei org.apache.camel.util.AsyncProcessorHelper.Prozess(AsyncProcessorHelper.java:77) 
bei org.apache.camel.Prozessor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) 
bei org.apache.camel.Prozessor.DelegateAsyncProcessor.Prozess(DelegateAsyncProcessor.java:89) 
bei org.apache.camel.management.InstrumentationProcessor.Prozess(InstrumentationProcessor.java:68) 
bei org.apache.camel.Komponente.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:109) 
bei javax.- servlet.http.HttpServlet.service(HttpServlet.java:820) 
bei org.eclipse.jetty.- servlet.ServletHolder.Griff(ServletHolder.java:534) 
bei org.eclipse.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1351) 
bei org.eclipse.jetty.servlets.MultiPartFilter.doFilter(MultiPartFilter.java:97) 
bei org.apache.camel.Komponente.jetty.CamelMultipartFilter.doFilter(CamelMultipartFilter.java:41) 
bei org.eclipse.jetty.- servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) 
bei org.eclipse.jetty.- servlet.ServletHandler.doHandle(ServletHandler.java:473) 
bei org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:929) 
bei org.eclipse.jetty.- servlet.ServletHandler.doScope(ServletHandler.java:403) 
bei org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:864) 
bei org.eclipse.jetty.server.handler.ScopedHandler.Griff(ScopedHandler.java:117) 
bei org.eclipse.jetty.server.handler.HandlerWrapper.Griff(HandlerWrapper.java:114) 
bei org.eclipse.jetty.server.Server.Griff(auf dem Server.java:352) 
bei org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) 
bei org.eclipse.jetty.server.HttpConnection$RequestHandler.Inhalt(HttpConnection.java:1068) 
bei org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:805) 
bei org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) 
bei org.eclipse.jetty.server.HttpConnection.Griff(HttpConnection.java:426) 
bei org.eclipse.jetty.io.nio.SelectChannelEndPoint.Griff(SelectChannelEndPoint.java:508) 
bei org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34) 
bei org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) 
bei org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:451) 
bei java.lang.Thread.run(Thread.java:662)
InformationsquelleAutor Brian | 2011-04-18
Schreibe einen Kommentar