我构建了一个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的配置:
由于 Friedbert
答案 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)
通过这些更改,我的系统再次运行!