Como especificar o ciphersuite a ser usado na sessão SSL

Eu criei um soquete na porta 443 como na linha a seguir:

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

Então, eu queria ver os ciphersuites habilitados neste socket, eu usei:

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

Então, eu quero escolher apenas um ciphersuite que eu quero que meu aplicativo use ao criar o handshake com o servidor remoto. Eu fiz o seguinte:

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

Então fiz o aperto de mão e verifiquei o ciphersuite da sessão:

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

Mas eu achei que o nome da cifra impressa na declaração de impressão anterior após o aperto de mão (como eu entendo, esta é a cifra realmente usada na sessão) não é o que eu defini anteriormente usandosetEnabledCipherSuites()

Por que eu ainda não estou vendo o meu ciphersuite escolhido é o usado? e também, eu também tenteigetEnabledCipherSuites() e imprimi-lo depois que eusetEnabledCipherSuites e encontrou a lista não mudou para o que eu defini. Eu não tenho certeza quando eu imprimir o ciphersuite habilitado, esta lista de ciphersuites depende de Java e sempre a mesma lista, ou depende do cliente ou do servidor? Qualquer corpo pode explicar?

EDITAR: Antes do aperto de mão, só tenho as seguintes linhas:

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

questionAnswers(1)

yourAnswerToTheQuestion