【问题标题】:WebSphere + Simple HTTPS Post = SocketExceptionWebSphere + 简单 HTTPS 发布 = SocketException
【发布时间】:2011-08-26 14:08:42
【问题描述】:

这是我能做到的最基础的——RAD 中的全新设置、全新项目、所有默认设置和此代码:

        try {
        String url = "https://www.verisign.com";
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(url);
        client.executeMethod(post);
        String response2 = post.getResponseBodyAsString();

    } catch (Exception e) {
        e.printStackTrace();

    }

这是我得到的错误(不是很丰富的恕我直言)

    java.net.SocketException
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:5)
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:93)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:651)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:628)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:497)

关于我可以尝试获得更具描述性的错误的任何想法?

更新

当我查看“runtimes\base_v61\profiles\AppSrv01\logs\ffdc”时,我发现此错误被打印到日志中:

com.ibm.websphere.ssl.SSLException: java.io.IOException: DerInputStream.getLength(): lengthTag=127, too big.
at com.ibm.websphere.ssl.JSSEHelper.getSSLSocketFactory(JSSEHelper.java:583)
at com.ibm.websphere.ssl.protocol.SSLSocketFactory.<init>(SSLSocketFactory.java:87)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1243)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:9)
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:93)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:651)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:628)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:497)

更新 - 有了答案 已修复,这是一个有趣的问题,这是您解决它的方法(如果您遇到过)

第 1 步:在 \SDP70\jdk\jre\bin 中启动 ikeyman.exe

第 2 步:在 SDP70\runtimes\base_v61\java\jre\lib\security 中打开您的 certs 文件(例如,我的是 cacerts)

第 3 步:输入您的密码(您还记得您的密码吗)?

第 4 步:如果数据库类型不是 PKS12 继续

第 5 步:将您的证书文件另存为 pks12

第 6 步:停止 Websphere

第 7 步:将旧证书文件重命名为“cacerts.bak”之类的名称,将新的 PKS12 证书文件重命名为默认文件

第 8 步:重启 websphere,得到合法错误

第 9 步:利润

【问题讨论】:

    标签: java http ssl websphere


    【解决方案1】:

    您想要的是导致此异常的异常信息和堆栈(“内部”异常)。 printStackTrace() 不会将这些打印出来。

    要么使用适当的日志框架(如 log4j 或 slf4j)为您执行此操作,要么您可以手动执行此操作。

    e.printStackTrace();
    Throwable cause = e.getCause();
    while (cause != null) {
        cause.printStackTrace();
        cause = cause.getCause();
    }
    

    【讨论】:

    • 嘿,爸爸,感谢您的快速回复,不幸的是,这就像兔子洞一样深。 e.getCause() 在第一次请求时返回 null 并且从不进入 while 语句。
    • toString() 给出的异常是什么?
    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多