В моем приложении XPages следующее исключение возникает при попытке открыть соединение HTTPS на другой сервер, который позволяет только TLSv1 и новее (не SSLv3):SSLHandshakeException из-за отсутствия TLS шифров в Domino JVM
javax.net.ssl.SSLHandshakeException: No appropriate protocol
Настройка javax.net.debug=ssl:handshake
предоставляет эту дополнительную информацию:
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
Основная проблема, кажется, не быть «нет доступных шифров пакет для TLSv1».
Получение по умолчанию и поддерживаемых шифров (getDefaultCipherSuites()
/getSupportedCipherSuites()
) от сокета сервера SSL завода (SSLServerSocketFactory.getDefault()
) показывает, что только SSL шифров доступны в Domino JVM, но не для TLS.
Код, который я использую для установления соединения HTTPS, отлично работает в не-Domino JVM с наборами шифрования TLS.
Может ли кто-нибудь сказать мне, как сделать набор шифров TLS доступным в JVM Domino? Или вообще помогите мне, если есть другая проблема, и я неверно истолковал отладочную информацию?
Дополнительная информация:
Domino версии: 9.0.1 FP7
Java Runtime версии: pwa6460sr16fp30-20160726_01 (SR16 FP30)
JVM версии : JRE 1.6.0 IBM J9 2.4 Windows 7 amd64-64 jvmwa6460sr16f p30-20160725_312906 (включен JIT, АОТ включен) J9VM - 20160725_312906 JIT - r9_20160725_121766 GC - GA24_Java6_SR16_20160725_1417_B312906
был установленфайлы политики Неограниченные ОКО в Domino JVM.
TLSv1 - это протокол, а не набор шифров. – EJP
@EJP: Я знаю, но для разных протоколов существуют разные шифровые сюиты. В моем случае для TLSv1 нет доступных наборов шифров. –
С версией JVM от Domino, равной 1.6, я думаю, что в этой версии JVM для версии TLS вам не нужна поддержка. IBM пообещала обновить JVM - последнее обещание поставки - это первый квартал 2017 года. Тем временем, я думаю, что обходные пути - это лучшее, что вы можете сделать. Просмотрите эти статьи, если вы еще этого не сделали: https://www-10.lotus.com/ldd/dominowiki.nsf/dx/TLS_1.2 и http://www-01.ibm.com/ support/docview.wss? uid = swg21985289 – jpishko