2015-12-09 14 views
7

Ein Drittanbieter, mit dem unsere Anwendung integriert wurde, hat kürzlich Änderungen an den Sicherheitsstufenprotokollen vorgenommen. Kurz gesagt, My Axis-Client sollte jetzt Anrufe mit TLSv1.1 oder TLSv1.2 senden. Ich habe andere Beiträge in Bezug auf diese gesehen, mit einigen guten Ideen:So erzwingen Sie die Verwendung eines Axis-Clients für das TLSv1.2-Protokoll

  1. here
  2. here.

Nachdem diese Änderungen im Code zu machen, ich habe wieder die Anrufe ausgelöst, ich ein Snipping Tool verwendet habe, das gesendete Paket zu überwachen, und ich immer noch in der SSL-Schicht sehen, dass das Protokoll TLSv1 verwendet wird.

the packet snippet

, was mache ich hier falsch?

das ist, wie ich meine neue SocketSecureFactory gesetzt:

AxisProperties.setProperty("axis.socketSecureFactory", MyTLSSocketSecureFactory.class.getName()); 

während MyTLSSocketSecureFactory ist:

public class MyTLSSocketSecureFactory extends JSSESocketFactory { 
    public MyTLSSocketSecureFactory(Hashtable attributes) { 
     super(attributes); 
    } 

    @Override 
    public Socket create(String host,int port, StringBuffer otherHeaders,BooleanHolder useFullURL) 
       throws Exception{ 
     Socket s = super.create(host, port, otherHeaders, useFullURL); 
     ((SSLSocket)s).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"}); 
     return s; 
    } 
} 

wirklich keine Kommentare zu schätzen wissen würde, Dank.

+0

ich genau das gleiche Problem mit - die 3'rd Partei Der Server hat seit letzter Nacht ohne vorherige Benachrichtigung nur TLS 1.1- oder 1.2-Verbindungen akzeptiert. Ich verwende JDK 6 u 35, Achse 1.4. Versucht mit der unten beschriebenen Lösung, aber es macht keinen Unterschied, sagt Tshark immer noch, ich gehe mit TLSv1: TLSv1 75 Alert (Level: Fatal, Beschreibung: Handshake Failure) – Sergiu

Antwort

5

In Ihrer MyTLSSocketSecureFactory-Klasse müssen Sie Ihre eigene SSLContext-Instanz erstellen und dann die sslFactory aus dem Kontext abrufen.

Aufschalten der initFactory() -Methode, und Somethings wie:

initFactory() { 
    SSLContext context = SSLContext.getInstance("TLSv1.2"); 
    context.init(null, null, null); 
    sslFactory = context.getSocketFactory(); 
} 
+0

Dies funktioniert gut. Sie müssen nur die SSLContext.getInstance ("TSLv1.2") ändern; "TSL" zu TLS .. – Krozen

0

können Sie auch nur die Standard-SSL-Kontext

SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); 
    sslContext.init(null, null, null); 
    SSLContext.setDefault(sslContext); 
ändern