得到JAVA异常:java.security.spec.InvalidKeySpecException:未知的KeySpec类型

时间:2016-10-09 21:46:17

标签: java ssl tomcat7 birt

我构建了一个JAVA Web应用程序,它使用SOAP从外部数据库服务器获取数据。几天前这个工作正常。现在,在建立数据库服务器时终止了与数据库服务器的连接。

在我的JAVA日志文件中,我发现了以下异常序列:

javax.net.ssl.SSLException: Server key
    at sun.security.ssl.Handshaker.throwSSLException(Handshaker.java:1260)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:283)
    ...
Caused by: java.security.spec.InvalidKeySpecException: Unknown KeySpec type: java.security.spec.ECPublicKeySpec
    at org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory.engineGeneratePublic(Unknown Source)
    at java.security.KeyFactory.generatePublic(KeyFactory.java:334)

可能数据库服务器的提供者已更改其SSL证书并获得另一个CA链。 我注意到中间CA使用SHA384withRSA作为签名算法。 (见COMODO, Domain Validation (SHA-2))。

那么,我该怎样做才能使我的系统再次运行? 如果您需要更多信息,请询问。

备注:来自Windows 7客户端的相同SOAP请求正常工作。我注意到,Windows 7客户端使用TLSv1.2建立SSL连接。我的服务器的Linux系统(见下文)使用TLSv1,

我的Java WebServer的配置:

  • Debian Wheezy
  • Java:OpenJDK 1.7.0u111
  • Tomcat 7.0.28
    • https连接器使用JSSE和sslProtocol =“TLS”
  • BIRT Runtime V4.5.0
    • DTP V1.12.0
    • org.eclipse.datatools.enablement.oda.ws V1.2.6

由于   Friedbert

1 个答案:

答案 0 :(得分:1)

解决!

显然,tomcat连接器的配置不再符合当前的安全标准。

我在2年前建立了这个系统。但是同时安全要求也在增加。

现在我从交钥匙中取出了最新的设备,比较了设置,发现了一些差异:

JAVA: java.security
    security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg
Tomcat7: server.xml /Connector
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
    server="Secret" URIEncoding="UTF-8" (may be, these does not matter)

通过这些更改,我的系统再次运行!