Eu tenho o mesmo problema.
Parece que não podemos fazer o que queremos.
A implementação Java do Java da Sun (Oracle) verifica apenas a ordem do conjunto de cifras do lado do cliente (prioridades) e ignora o lado do servidor.
Classes relacionadas são:
sun.security.ssl.ServerHandshaker
sun.security.ssl.CipherSuite
No ServerHandshaker,
"private void chooseCipherSuite (ClientHello mesg)"
link
/*
* Choose cipher suite from among those supported by client. Sets
* the cipherSuite and keyExchange variables.
*/
private void chooseCipherSuite(ClientHello mesg) throws IOException {
for (CipherSuite suite : mesg.getCipherSuites().collection()) {
if (isEnabled(suite) == false) {
continue;
}
if (doClientAuth == SSLEngineImpl.clauth_required) {
if ((suite.keyExchange == K_DH_ANON) || (suite.keyExchange == K_ECDH_ANON)) {
continue;
}
}
if (trySetCipherSuite(suite) == false) {
continue;
}
return;
}
fatalSE(Alerts.alert_handshake_failure,
"no cipher suites in common");
}
Podemos ver que ele integra os conjuntos de criptografia na mensagem de saudação do cliente e escolhe o pacote de criptografia.