当前位置: 首页 > 知识库问答 >
问题:

使用自定义java运行时映像(但不是不使用)时发生的javax.net.ssl.SSLHandShakeException

乐正意智
2023-03-14

我有这样一个类,它只是发送一个http post请求

import java.net.*; import java.io.*;
public class JarRuntimeTest{
    public void start() throws Exception{
        HttpURLConnection connection = (HttpURLConnection) (new URL("https://google.com").openConnection());
        connection.setRequestMethod("POST");
        System.out.println(
        getResult((connection.getResponseCode() == HttpURLConnection.HTTP_OK)?
        connection.getInputStream():connection.getErrorStream()));
    }
    public String getResult(InputStream in) throws Exception{
        StringBuilder builder = new StringBuilder("");
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = reader.readLine()) != null) builder.append(line);
        reader.close();
        return builder.toString();
    }
    public static void main(String[] args){try{new JarRuntimeTest().start();}catch(Exception e){e.printStackTrace();}}
}

我有这个.bat文件,它为它构建我的jar和java运行时映像,并使用这个自定义运行时映像来运行我的jar:

@echo off
javac JarRuntimeTest.java
jar --create --file thisismyjar.jar  --main-class JarRuntimeTest JarRuntimeTest.class
jdeps --list-deps thisismyjar.jar
jlink --add-modules java.base --output myruntime
myruntime\bin\java.exe -jar thisismyjar.jar
pause
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:356)
        at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)
        at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:202)
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:171)
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1498)
        at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1404)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:441)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:412)
        at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:574)
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1653)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1577)
        at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
        at JarRuntimeTest.start(JarRuntimeTest.java:7)
        at JarRuntimeTest.main(JarRuntimeTest.java:18)

共有1个答案

丌官绍元
2023-03-14

正如@dave_thompson_085所说,必须包含jdk.crypto.ec。我不确定为什么JDEPS没有显示这一点。不管怎样,在我的jlink命令中包含它就起到了作用,而且它起作用了:

jlink --add-modules java.base,jdk.crypto.ec --output myruntime
myruntime\bin\java.exe -jar thisismyjar.jar
 类似资料:
  • 问题内容: 我创建了一个自定义SSLSocketFactory类,并将其设置如下 从Eclipse Dev Environment运行并在命令提示符下将其作为Jar文件运行时,它可以正常工作。但是,当我将其包装在服务包装中并作为Windows Service启动时,它不起作用。我收到以下异常, 任何帮助??? 问题答案: 自从我发布此问题以来已经很长时间了。由于这篇文章没有任何答案,而且似乎也有一

  • 我目前正在使用Dockerfile创建Tomcat 6.0.44。看起来是这样的: 从Dockerfile构建映像很好,但当我运行它时,我得到以下错误: 你知道怎么解决这个问题吗? 我要做的是传入这个参数DentityExpansionLimit=100000。有没有比catalina更简单的方法。sh? 如有任何帮助/建议,将不胜感激。 编辑:我正在EC2上运行Redhat实例,并使用Docke

  • 错误:ExampleUtil模块找不到module-info.class 有没有一种方法可以使用不是模块的JAR来创建运行时映像?谢谢你。

  • 我正在测试DynamoDB表,希望使用关键字“dev”为prod和dev环境设置不同的表名,用于开发,用于生产。 我有一个POJO 在Prod上,我希望它的名字是abc_xy_Prod_MyProjectName_Employee。 所以,我写了一个TableNameResolver 这是通过创建一个名为abc_xy_prod_MyProjectName_Employee in productio

  • 问题内容: 我尝试获取一些数据库值并将其显示在列表视图中。 这是我的代码: 我得到的RuntimeException 这是错误: 03-11 20:11:24.650:E / AndroidRuntime(887):java.lang.RuntimeException: 无法启动活动 ComponentInfo {com.NIRR.redistributionsystem / com.NIRR.r

  • 我在一个项目中,目前构建了26个JAR(+6如果我们算上仅测试的JAR)。出于性能原因,我们希望将它们全部组合到单个可执行文件中。这是在windows机器上,具有graalvm-ce-java11-20.0.0。我们在用IntelliJ和Gradle。我现在只是想出一个命令行,在我尝试在Gradle中复制它之前,它甚至可以工作一点点。Gradle还不在图片中,因此缺少适当的标记。 我想尽了一切办法