Публикация моего комментария в качестве ответа, потому что почему бы и нет.
Другие ответы и каждый документ, который я нашел в Интернете, похоже, согласны с тем, что то, о чем вы просите, невозможно сделать в Java, пока нетпо крайней мере.Вы можете включить / отключить протоколы глобально, и вы можете включить / отключить типы шифров глобально, но вы не можете сделать один на основе другого.
Однако, поскольку вы находитесь на стороне DevOps, возможно, решение не от Java.возможно.Вы можете запустить отдельные экземпляры приложения, в каждом из которых включен только TLSv1.1, только TLSv1.2 и т. Д., И применить требуемый шифровальный фильтр к каждому из них;а затем nginx (или любой другой используемый вами) перенаправляет трафик на соответствующий экземпляр в зависимости от обнаруженного протокола.
Итак, один экземпляр в NODE1 с:
jdk.tls.client.protocols=TLSv1.1
jdk.tls.disabledAlgorithms=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
Другой экземпляр в NODE2 с:
jdk.tls.client.protocols=TLSv1.2
jdk.tls.disabledAlgorithms=...
И некоторые правила nginx (используйте return
или rewrite
, как считаете нужным):
server {
[...]
if ( $ssl_protocol = TLSv1.1 ) {
return 302 $scheme://NODE1.yourhost.com$request_uri;
}
if ( $ssl_protocol = TLSv1.2 ) {
rewrite ^ $scheme://NODE2.yourhost.com$request_uri;
}
Я всего лишь разработчик Java, мой опыт работы с nginxочень ограничен, так что вам может понадобиться немного изменить конфигурациюПросто пытаюсь помочь.