Люди, я надеюсь, что там что-то очевидное, что мне не хватает, и я надеюсь, что кто-то сможет пролить свет. Я пытаюсь запустить TLSv1.2 в контексте SSL + NIO (используя AndroidAsync), поэтому я пытаюсь чтобы включить его через SSLEngine. Я могу запустить код следующим образом:
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
String[] protocols = sslContext.getSupportedSSLParameters().getProtocols();
for (String protocol : protocols) {
Timber.d("Context supported protocol: " + protocol);
}
SSLEngine engine = sslContext.createSSLEngine();
String[] supportedProtocols = engine.getSupportedProtocols();
for (String protocol : supportedProtocols) {
Timber.d("Engine supported protocol: " + protocol);
}
И в итоге я вижу это на logcat:
06-22 21:56:27.715 1117-1117/? D/XXX﹕ Context supported protocol: SSLv3
06-22 21:56:27.715 1117-1117/? D/XXX﹕ Context supported protocol: TLSv1
06-22 21:56:27.725 1117-1117/? D/XXX﹕ Context supported protocol: TLSv1.1
06-22 21:56:27.725 1117-1117/? D/XXX﹕ Context supported protocol: TLSv1.2
06-22 21:56:27.735 1117-1117/? D/XXX﹕ Engine supported protocol: TLSv1
06-22 21:56:27.745 1117-1117/? D/XXX﹕ Engine supported protocol: SSLv3
Конечно, если я пытаюсь engine.setEnabledProtocols(new String[] { "TLSv1.2" })
получить исключение IllegalArgumentException, то протокол TLSv1.2 не поддерживается.
Я вижу контекстные утверждения для поддержки TLSv1.2, но тогда движок, который я делаю из этого контекста, не работает? Что здесь происходит? Ничего из этого не изменится, если я использую "TLS" вместо "TLSv1.2" в первой строке выше, btw.
Я понимаю, что это может иметь какое-то отношение к этой проблеме, и я прочитал этот (еще не отвеченный) вопрос и статьи, подобные этому, но они, похоже, не попадают в точку - решения Я видел, что все, похоже, полагаются на SSLSocket, а не на SSLEngine.
Большое спасибо за любые знания, которые вы можете потерять.
ОБНОВЛЕНИЕ 6/23/14 10AMEDT
Итак, я нашел SSLEngine.setSSLParameters
, который, я надеялся, позволил мне передать SSLParameters, который я получил из SSLContext.getSupportedSSLParameters()
, но когда я вызываю это, я получаю исключение, которое утверждает, что набор шифров не поддерживается, поэтому он похоже, что setSSLParameters() делает то же самое, что и setEnabledCipherSuites(), и движок уже находится в состоянии, когда он не распознает протокол/пакеты TLS 1.2 как поддерживаемый.