【问题标题】:Java 8 Swing application: javax.net.ssl.SSLKeyException: RSA premaster secret errorJava 8 Swing 应用程序:javax.net.ssl.SSLKeyException:RSA premaster secret 错误
【发布时间】:2020-08-13 14:41:45
【问题描述】:

我有一个使用 Java 8 u161 的基于 Swing 的 Java 应用程序。 应用程序使用的 jre 存储在其目录之一中(它不使用已安装的 jre)。 应用程序中的一个屏幕通过 HTTPS 接近安装在远程服务器上的 Webshere。公钥安装在客户端的 jre\lib\security 文件夹中的 cacert 上。

当应用程序作为独立应用程序运行时,一切正常:握手成功完成,消息发送到服务器,返回代码为 200(OK)。 但是,当应用程序与另一个应用程序(将代码注入 Java 应用程序的 dotnet 应用程序。我什至不确定到底是什么)协作运行时,会抛出“javax.net.ssl.SSLKeyException: RSA premaster secret error”

互联网上的大多数类似问题都是通过卸载并重新安装所有 Java 版本来解决的。但是我的Java没有安装,所以我不能这样做。

我检查了我的 Java 应用程序是否使用了正确的 jre - 它确实使用了三倍。

我不明白是什么导致了这个异常,也不知道还要检查什么。

这是我打开连接的方式:

URL servletUrl = new URL(urlStr);  //throws java.net.MalformedURLException
HttpsURLConnection.setDefaultHostnameVerifier(new ChequesServletHostnameVerifier());
servletConnection = (HttpsURLConnection) servletUrl.openConnection();  //throws java.io.IOException
servletConnection.setDoOutput(true);
servletConnection.setUseCaches(false);
OutputStream os = servletConnection.getOutputStream();  //throws java.io.IOException

这是完整的堆栈跟踪:

javax.net.ssl.SSLKeyException: RSA premaster secret error
    at sun.security.ssl.RSAClientKeyExchange.<init>(Unknown Source)
    at sun.security.ssl.ClientHandshaker.serverHelloDone(Unknown Source)
    at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    at sun.security.ssl.Handshaker.processLoop(Unknown Source)
    at sun.security.ssl.Handshaker.process_record(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
    at qs.localtransactions.servlet.SrvltTxn.connect2Servlet(SrvltTxn.java:114)
    at qs.localtransactions.AmgImgBase.retrieveImagesFromServlet(AmgImgBase.java:562)
    at qs.localtransactions.AMGIMG91.sendAndReceive(AMGIMG91.java:27)
    at qs.localtransactions.AMGIMG.sendAndReceive(AMGIMG.java:32)
    at idb.messenger.sender.LocalBackendDispatcher.send(LocalBackendDispatcher.java:26)
    at qc.distribution.protocol.idb.QtMessengerIDB.sendAndReceive(QtMessengerIDB.java:127)
    at qc.distribution.QtTransaction.sendRemote(QtTransaction.java:3338)
    at qc.distribution.QtTransaction.send(QtTransaction.java:2528)
    at qc.distribution.QtTransaction.send(QtTransaction.java:1930)
    at qt.presentacion.QtLogic.send(QtLogic.java:800)
    at qt.presentacion.QtLogic.performObserverCommand(QtLogic.java:584)
    at qt.presentacion.logic.QtAction.evaluateSensitive(QtAction.java:536)
    at qt.presentacion.logic.QtAction.evaluate(QtAction.java:258)
    at qt.presentacion.logic.QtLogicEvaluator.evaluateActions(QtLogicEvaluator.java:472)
    at qt.presentacion.logic.QtLogicEvaluator.evaluate(QtLogicEvaluator.java:397)
    at qt.presentacion.logic.QtLogicRoutines.evaluateNotificationStack(QtLogicRoutines.java:582)
    at qt.presentacion.logic.QtLogicRoutines.evaluate(QtLogicRoutines.java:555)
    at qt.presentacion.logic.QtLogicEvaluator.update(QtLogicEvaluator.java:1431)
    at qt.presentacion.logic.QtLogicStackController.processNotification(QtLogicStackController.java:108)
    at qc.controls.observer.QtNotificator.notify(QtNotificator.java:65)
    at qt.presentacion.QtRadioButtonModel.setValid(QtRadioButtonModel.java:110)
    at qt.presentacion.QtRadioButton.radiobutton_ItemStateChanged(QtRadioButton.java:1111)
    at qt.presentacion.QtRadioButton.connEtoC2(QtRadioButton.java:150)
    at qt.presentacion.QtRadioButton.itemStateChanged(QtRadioButton.java:882)
    at javax.swing.AbstractButton.fireItemStateChanged(Unknown Source)
    at javax.swing.AbstractButton$Handler.itemStateChanged(Unknown Source)
    at javax.swing.DefaultButtonModel.fireItemStateChanged(Unknown Source)
    at qt.presentacion.QtRadioButtonModel.setSelected(QtRadioButtonModel.java:95)
    at javax.swing.ButtonGroup.setSelected(Unknown Source)
    at qt.presentacion.QtRadioButtonModel.setSelected(QtRadioButtonModel.java:89)
    at javax.swing.AbstractButton.setSelected(Unknown Source)
    at qt.presentacion.QtRadioButton.select(QtRadioButton.java:1181)
    at qt.presentacion.QtRadioButton.performObserverCommand(QtRadioButton.java:1045)
    at qt.presentacion.logic.QtAction.evaluateSensitive(QtAction.java:536)
    at qt.presentacion.logic.QtAction.evaluate(QtAction.java:258)
    at qt.presentacion.logic.QtLogicEvaluator.evaluateActions(QtLogicEvaluator.java:472)
    at qt.presentacion.logic.QtLogicEvaluator.evaluate(QtLogicEvaluator.java:397)
    at qt.presentacion.logic.QtLogicEvaluator.register(QtLogicEvaluator.java:1312)
    at qt.presentacion.QtLogic.registerEvaluators(QtLogic.java:741)
    at qt.presentacion.QtLogic.initState(QtLogic.java:510)
    at qt.presentacion.QtLogic.paint(QtLogic.java:529)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at qt.presentacion.QtPanel.paint(QtPanel.java:1995)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JLayeredPane.paint(Unknown Source)
    at javax.swing.JComponent.paintChildren(Unknown Source)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
    at javax.swing.RepaintManager.paint(Unknown Source)
    at javax.swing.JComponent._paintImmediately(Unknown Source)
    at javax.swing.JComponent.paintImmediately(Unknown Source)
    at javax.swing.RepaintManager$4.run(Unknown Source)
    at javax.swing.RepaintManager$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.access$1200(Unknown Source)
    at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.security.NoSuchAlgorithmException: SunTlsRsaPremasterSecret KeyGenerator not available
    at javax.crypto.KeyGenerator.<init>(KeyGenerator.java:169)
    at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:223)
    at sun.security.ssl.JsseJce.getKeyGenerator(Unknown Source)
    ... 105 more

欢迎提供任何信息。

【问题讨论】:

    标签: java swing https


    【解决方案1】:

    就像许多人在旧帖子中提到的异常

    javax.net.ssl.SSLKeyException: RSA premaster secret 错误

    这意味着混合了两个不同的java版本。因此,重新安装 Java 会有所帮助。

    就我而言,显然,dotnet 应用程序将 java 扩展文件夹设置为较旧的 java 版本。当扩展配置设置为正确的Java版本后,问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-26
      • 2017-05-05
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多