Jak określić urządzenie szyfrujące, które ma być używane w sesji SSL

Stworzyłem gniazdo na porcie 443, jak w następującej linii:

socket = (SSLSocket) factory.createSocket(hostName, port);

Następnie chciałem zobaczyć włączone urządzenia szyfrujące w tym gnieździe, których użyłem:

String[] enCiphersuite=socket.getEnabledCipherSuites();
System.out.println("Enabled ciphersuites are: "+Arrays.toString(enCiphersuite));

Następnie chcę wybrać tylko jeden zestaw szyfrów, którego chcę używać podczas tworzenia uzgadniania ze zdalnym serwerem. Zrobiłem co następuje:

String pickedCipher[] ={"TLS_RSA_WITH_AES_128_CBC_SHA"}; 
socket.setEnabledCipherSuites(pickedCipher);
System.out.println("ciphersuite set to: "+Arrays.toString(pickedCipher));

Potem uścisnąłem dłoń i sprawdziłem zestaw szyfrów sesji:

socket.startHandshake();
System.out.println("Session ciphersuite is"+socket.getSession().getCipherSuite() );

Ale odkryłem, że nazwa szyfru wydrukowanego w poprzedniej instrukcji wydruku po uzgadnianiu (jak rozumiem, jest to rzeczywiście używany szyfr w sesji) nie jest tym, co wcześniej ustawiłem za pomocąsetEnabledCipherSuites()

Dlaczego nadal nie widzę, że mój wybrany zestaw szyfrów jest używany? a także próbowałemgetEnabledCipherSuites() i wydrukuj to po IsetEnabledCipherSuites i znalazłem, że lista nie zmieniła się na to, co ustawiłem. Nie jestem pewien, kiedy drukuję włączony zestaw szyfrów, czy ta lista urządzeń szyfrujących zależy od Java i zawsze tej samej listy, czy zależy od klienta lub na serwerze? Czy jakiekolwiek ciało może wyjaśnić?

EDYTOWAĆ: Przed uściskiem dłoni mam tylko następujące linie:

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory(); 
SSLSocket socket=null;
try {
socket = (SSLSocket) factory.createSocket(hostName, port);
socket.setSoTimeout(15000); 
socket.startHandshake(); //handshake
.
.

questionAnswers(1)

yourAnswerToTheQuestion