0

Da ich mit einigen Legacy-Server arbeiten muss und seit RC4 aus dem Java 8 entfernt wurde, muss ich einige RC4-basierte Chiffren wieder aktivieren. Wie in der Release-Information beschrieben, müssen wir SSLSocket/SSLEngine.setEnabledCipherSuites() verwenden. Da ich den Apache HTTP Client verwende, konnte ich keinen Weg finden, dies zu tun. Danke im Voraus! (Ich fand auch recht Aufliegers Problem mit aus einer Antwort so gedacht ein neues Posting)Wie setze ichEnabledCipherSuites bei der Verwendung von Apache HTTP Client?

Antwort

1

Ich war vor dem gleichen Problem, und ich war in der Lage, dies herauszufinden.

SecureProtocolSocketFactoryImpl protFactory = new SecureProtocolSocketFactoryImpl(); 
httpsClient.getHostConfiguration().setHost(host, port, httpsProtocol); 

In der "SecureProtocolSocketFactoryImpl" Klasse haben Sie die Methode public Sockel create() für SecureProtocolSocketFactory Klasse außer Kraft zu setzen.

Bei diesem Verfahren wird bei Ihnen wird also eine Fassung wie diese

SSLSocket soc = (SSLSocket) getSSLContext().getSocketFactory().createSocket(
        socket, 
        host, 
        port, 
        autoClose 
       ); 

bekommen können, so etwas wie unten tun.

ciphersToBeEnabled[0] = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"; 
soc.setEnabledCipherSuites(ciphersToBeEnabled); 

hoffe, Sie bekommen die Idee. Wenn Sie irgendwelche Probleme haben, kommentieren Sie bitte unten. Beachten Sie, dass dies nur RC4-bezogene Verschlüsselungen nicht aktiviert. Sie müssen die Java-Datei "java.security" in jre/lib/security/file ändern und CR4 aus der Liste der deaktivierten Algorithmen entfernen.

0

Der empfohlene Weg, um die HttpClient zu erhalten ist durch HttpClientBuilder verwenden. In diesem Builder können Sie die HttpClientConnectionManager festlegen, die wiederum eine Registry<ConnectionSocketFactory> übernehmen kann. In diesem ConnectionSocketFactory können Sie Verschlüsselungen und Protokolle konfigurieren, die der Client einschränken möchte.

Beispielcode:

Registry<ConnectionSocketFactory> socketFactoryRegistry; 
    { 
     SSLContext sslcontext = <your SSLContext>; 
     socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() 
      .register("http", new PlainConnectionSocketFactory()) 
      .register("https", new SSLConnectionSocketFactory(sslcontext, 
            <your supported protocols, could be null>, 
            <your supported ciphers, could be null>, 
            <your HostnameVerifier> 
      .build(); 
    } 

HttpClientBuilder b = HttpClientBuilder.create() 
    .setConnectionManager(new BasicHttpClientConnectionManager(socketFactoryRegistry)) 
    .set<anything else you want>(<with what you want>); 

HttpClient client = b.build(); 
Verwandte Themen