2016-11-27 27 views
5

W mojej aplikacji XPages następujące jest wyjątek, gdy próbuję otworzyć połączenie HTTPS do innego serwera, który pozwala jedynie TLSv1 i nowsze (nie SSLv3):SSLHandshakeException powodu braku szyfrów TLS w Domino JVM

javax.net.ssl.SSLHandshakeException: No appropriate protocol 

Ustawianie javax.net.debug=ssl:handshake zapewnia dodatkowe informacje:

SSLContextImpl: Using X509ExtendedKeyManager com.ibm.jsse2.hd 
SSLContextImpl: Using X509TrustManager com.ibm.jsse2.pc 
IBMJSSE2 will ignore com.ibm.jsse2.overrideDefaultProtocol since was set to a non recognized value TLSv1 
Installed Providers = IBMJSSE2, IBMJCE, IBMJGSSProvider, IBMCertPath, IBMSASL, IBMXMLCRYPTO, IBMXMLEnc, Policy, IBMSPNEGO 
JsseJCE: Using SecureRandom IBMSecureRandom from provider IBMJCE version 1.2 
trigger seeding of SecureRandom 
done seeding SecureRandom 
IBMJSSE2 will enable CBC protection 
IBMJSSE2 to send SCSV Cipher Suite on initial ClientHello 
JsseJCE: Using SecureRandom IBMSecureRandom from provider IBMJCE version 1.2 
IBMJSSE2 will allow RFC 5746 renegotiation per com.ibm.jsse2.renegotiate set to none or default 
IBMJSSE2 will not require renegotiation indicator during initial handshake per com.ibm.jsse2.renegotiation.indicator set to OPTIONAL or default taken 
IBMJSSE2 will not perform identity checking against the peer cert check during renegotiation per com.ibm.jsse2.renegotiation.peer.cert.check set to OFF or default 
IBMJSSE2 will not allow unsafe server certificate change during renegotiation per jdk.tls.allowUnsafeServerCertChange set to FALSE or default 
Is initial handshake: true 
JsseJCE: Using KeyAgreement ECDH from provider IBMJCE version 1.2 
JsseJCE: Using signature SHA1withECDSA from provider TBD via init 
JsseJCE: Using signature NONEwithECDSA from provider TBD via init 
JsseJCE: Using KeyFactory EC from provider IBMJCE version 1.2 
JsseJCE: Using KeyPairGenerator EC from provider TBD via init 
JsseJce: EC is available 
Ignoring disabled cipher suite: SSL_RENEGO_PROTECTION_REQUEST for TLSv1 
No available cipher suite for TLSv1 
Thread-8, handling exception: javax.net.ssl.SSLHandshakeException: No appropriate protocol 
Thread-8, SEND TLSv1 ALERT: fatal, 
description = handshake_failure 

głównym problemem wydaje się być „Brak szyfr apartament dla TLSv1”.

Pierwsze domyślne i obsługiwane szyfrów (getDefaultCipherSuites()/getSupportedCipherSuites()) z fabryki gniazda serwera SSL (SSLServerSocketFactory.getDefault()) ujawnia, że ​​tylko SSL szyfrów są dostępne w Domino JVM, ale żaden z TLS.

Kod używany do ustanowienia połączenia HTTPS działa poprawnie w JVM innej niż Domino z pakietami szyfrów TLS.

Czy ktoś może mi powiedzieć, jak udostępnić pakiety szyfrów TLS w maszynie JVM Domino? Lub ogólnie mi pomóc, jeśli istnieje inny problem i źle zinterpretowałem informacje debugowania?


Dodatkowe informacje:

Domino wersja: 9.0.1 7PR

wersja środowiska wykonawczego Java: pwa6460sr16fp30-20160726_01 (SR16 FP30)

JVM wersja : JRE 1.6.0 IBM J9 2.4 Windows 7 amd64-64 jvmwa6460sr16f p30-20160725_312906 (włączone JIT, AOT włączona) J9VM - 20160725_312906 JIT - r9_20160725_121766 GC - GA24_Java6_SR16_20160725_1417_B312906

pliki zasad Nieograniczony JCE zostały zainstalowane w Domino JVM.

+0

TLSv1 to protokół, a nie zestaw algorytmów szyfrowania. – EJP

+0

@EJP: Wiem, ale są różne zestawy szyfrów dla różnych protokołów. W moim przypadku nie ma dostępnych zestawów szyfrów dla TLSv1. –

+0

Przy wersji JVM Domino wynoszącej 1.6 myślę, że nie ma dostępnej pomocy w tej wersji JVM dla potrzebnej wersji TLS. IBM obiecał zmodernizować maszynę JVM - ostatnia promocja na dostawę to pierwszy kwartał 2017 r. W międzyczasie uważam, że obejście jest najlepsze, co można zrobić. Zapoznaj się z tymi artykułami, jeśli jeszcze tego nie zrobiłeś: https://www-10.lotus.com/ldd/dominowiki.nsf/dx/TLS_1.2 i http://www-01.ibm.com/ support/docview.wss? uid = swg21985289 – jpishko

Odpowiedz

2

Problem wydaje się być związany z how some Java SDKs limit the available cipher suites. Na przykład Dropbox Java SDK używa zakodowanej na sztywno listy nazw zestawów szyfrów, które zaczynają się od "TLS_". Jednak w maszynie JVM Domino wszystkie nazwy zestawów szyfrów zaczynają się od "SSL_". W konsekwencji wszystkie pakiety szyfrów zostają wyłączone w utworzonych gniazdach SSL, ponieważ żadna z ich nazw nie jest zgodna.

Powiązane problemy