Axis2 Cipher Suite und Protocol einschränken

bartholodeus

Mitglied
Hallo zusammen,

mein Client muss auf HTTPS mit Server- und Clientzertifikat umgestellt werden. Das habe ich auch schon gemacht und die Kommunikation mit einem Test-Webservice in einem Tomcat deployed. Das funktioniert auch einwandfrei.

Die Anforderung ist, ausschließlich die Cipher Suite TLS_RSA_WITH_AES_256_CBC_SHA und das Protokoll TLSv1.2 zu verwenden. Auf Serverseite war das nicht schwer. Mein Connector ist wie folgt definiert:
[XML]<Connector SSLEnabled="true" sslProtocol="TLS" ciphers="TLS_RSA_WITH_AES_256_CBC_SHA" clientAuth="true" keystoreFile="pathToKeystore" keystorePass="keypass" maxThreads="150" port="8444" protocol="HTTP/1.1" scheme="https" secure="true" truststoreFile="pathToTruststore" truststorePass="keypass"/>[/XML]

Wie kann ich denn im Code des Clients die akzeptierten Cipher Suite und das Protokoll auf TLS_RSA_WITH_AES_256_CBC_SHA und TLSv1.2 einschränken? Hintergrund ist, dass der Server mehrere Suites anbietet; man soll allerdings die stärkste Verschlüsselung wählen, die möglich ist.

Ich habe Axis2 v1.4.1 benutzt, um den Stub zu generieren.

Vielen Dank für eure Hilfe.

Bart
 
Danke für den Hinweis, Keo.

Ich habe das Problem wie folgt gelöst:

Ich habe den Sourcecode der org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory genommen, die das Interface org.apache.commons.httpclient.protocol.ProtocolSocketFactory implementiert und diese Methode hinzugefügt:

Code:
private Socket setCipherSuite(Socket socket) {
		if (socket instanceof SSLSocket) {
			((SSLSocket) socket)
					.setEnabledCipherSuites(new String[] { ApplicationConfiguration
							.getString("MSTVEnabledCipherSuites") });
		}
		return socket;
	}

In der Konfiguration kann man dann alle ChipherSuites durch Komma getrennt eintragen, die man unterstützen möchte, z.B. TLS_RSA_WITH_AES_256_CBC_SHA.

Bei allen createSocket Methoden habe ich diese Methode dann aufgerufen.

Code:
	public Socket createSocket(String host, int port) throws IOException,
			UnknownHostException {
		return setCipherSuite(SSLSocketFactory.getDefault().createSocket(host,
				port));
	}

Diese Klasse wird dann wie in dem Tutorial (siehe Link von Keo) gesetzt.

Ob das jetzt die sauberste Lösung ist, weiß ich nicht, aber sie funktioniert.

Grüße, Bart
 

Zurück
Oben