2015-06-27 1 views
0

Мне нужна помощь, чтобы исправить исключение сертификата в моем проекте. Я получаю java.security.cert.CertificateException: данные сертификата не могут быть обработаны Ниже приведены сведения о состоянии среды для клиентское приложение:java.security.cert.CertificateException: данные сертификата не могут быть обработаны

  • Мой клиент приложение развертывается на IBM WebsphereApplicationServer (WAS) 6,0
  • Использование IBM JDK 1.4.2 построен с использованием WAS 6,0

Сторонний поставщик Webservice недавно обновился до SHA-256. С настройкой выше клиента я получаю исключение Handshake. Мы попробовали использовать банку Bouncy Castle для поддержки SHA-256. После этого я вижу ниже исключения при принятии WebService вызова:

WebContainer : 0, SEND TLSv1 ALERT: fatal, description = certificate_unknown        
WebContainer : 0, WRITE: TLSv1 Alert, length = 2                
WebContainer : 0, called closeSocket()                  
WebContainer : 0, handling exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificate data canot be processed 
Exception javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificate data canot be processed 
Finalizer, called close()                     
Finalizer, called closeInternal(true) 

к хранилищу и доверенных сертификатов у меня есть это от по умолчанию версии JDK:

keyStore is: /usr/local/opt/was/was60/java/jre/lib/security/cacerts 
keyStore type is : jks             
init keystore               
trustStore is: /usr/local/opt/was/was60/java/jre/lib/security/cacerts 
trustStore type is : jks 

Здесь вы несколько журналов:

SystemErrR AxisFault 
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException 
faultSubcode: 
faultString: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificate data canot be processed 
faultActor: 
faultNode: 
faultDetail: 
     {http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificate data canot be processed 
     at com.ibm.jsse2.bx.a(bx.java:114) 
     at com.ibm.jsse2.by.a(by.java:24) 
     at com.ibm.jsse2.by.a(by.java:444) 
     at com.ibm.jsse2.w.a(w.java:281) 
     at com.ibm.jsse2.w.a(w.java:105) 
     at com.ibm.jsse2.v.a(v.java:25) 
     at com.ibm.jsse2.by.a(by.java:272) 
     at com.ibm.jsse2.by.m(by.java:198) 
     at com.ibm.jsse2.by.startHandshake(by.java:68) 
     at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186) 
     at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191) 
     at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404) 
     at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138) 
     at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) 
     at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) 
     at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) 
     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165) 
     at org.apache.axis.client.Call.invokeEngine(Call.java:2784) 
     at org.apache.axis.client.Call.invoke(Call.java:2767) 
     at org.apache.axis.client.Call.invoke(Call.java:2443) 
     at org.apache.axis.client.Call.invoke(Call.java:2366) 
     at org.apache.axis.client.Call.invoke(Call.java:1812) 
     at com.cingular.csi.CSI.Namespaces.v94.wsdl.CingularWirelessCSI_wsdl.InquireWirelineServiceAppointmentReservationsSoapHttpBindingStub.inquireWireline 

И, наконец, еще несколько замечаний:

  • Ни WAS, ни JDK не могут быть модернизированы, поскольку приложения устойчивы.

  • SocketFactory используется: com.ibm.jsse2.SSLSocketFactoryImpl

  • Пробовал javax.net.SSLSocketFactoryImpl. Он не работает в SocketContext.

  • Попробовал добавить сторонние серверные сертификаты в мой магазин доверия (cacerts) с помощью keytool. Это тоже не сработало.

  • Также попытался использовать DummyClientKeyFile.jks и DummyClientTrustFile.jks как файлы Keystore и truststore соответственно вместо cacerts JDK, но напрасно.

Я застрял в этом вопросе, так как более двух недель сейчас. Любая помощь приветствуется.

ответ

0

IBM JVM 1.4.2 не поддерживает сертификаты, подписанные с шифрованием SHA256. Я поднял PMR, чтобы подтвердить это, когда мы столкнулись с этой проблемой, и ответ был:.

«Вам нужно будет вернуться к использованию старых шифров стилей или обновить Мы начали поддерживать SHA 256 из Java 1.5 дальнейшого Это не так. возможно задний порт функция. "

Если вы найдете упоминания о Java 1.4.2, поддерживающие такие сертификаты, проверьте, к какой именно JVM поставщика относится это - его вероятный Oracle, поскольку их JVM 1.4.2 поддерживает подписанные сертификаты SHA256.

Update

Ваши варианты получения вокруг этой проблемы являются: (! Или лучше)

  1. обновление до 1.5 JVM IBM. Если вы используете Java 1.4.2 как часть продукта IBM, например. WebSphere Application Server (v6), то вам также потребуется обновить его.
  2. если вы не привязаны к IBM, но должны находиться на 1.4.2, попробуйте использовать 1.4.2 JVM для Oracle.
  3. использовать перекрестный прокси. Это включает подключение к прокси-серверу, прокси-сервер , завершающий соединение SSL, затем открытие второго соединения в конечный пункт назначения. Прокси-сервер становится человеком по середине, поэтому есть проблемы с безопасностью, которые необходимо учитывать здесь (например, соответствие PCI DSS , если вы отправляете данные платежной карты).
  4. Вариант № 3 предполагает, что брандмауэр делает это прозрачно.