java - tomcat ssl客户端握手java错误

标签 java security tomcat ssl

错误:在与 ssl 服务器的 ssl 握手上。之后:客户端问候、服务器问候、证书、服务器 key 交换和服务器问候完成。 Web 应用程序崩溃并显示:java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b

问题发生在:
tomcat 6.0.29

尝试了以下 JVM:
1.5、1.6_22、1.6_25
正在运行:
java-版本 Java 版本“1.6.0_25” Java(TM) SE 运行时环境(build 1.6.0_25-b06) Java HotSpot(TM) 服务器虚拟机(build 20.0-b11,混合模式)

操作系统:
uname -a
SunOS 主机名 5.10 Generic_118833-33 sun4v sparc sun4v

更多详情:

堆栈跟踪:

java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b
    javax.crypto.KeyGenerator.a(DashoA13*..)
javax.crypto.KeyGenerator.<init>(DashoA13*..)
javax.crypto.KeyGenerator.getInstance(DashoA13*..)
com.sun.net.ssl.internal.ssl.JsseJce.getKeyGenerator(JsseJce.java:223)
com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:89)
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:744)
com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:238)
com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)
com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:73)
com.gosselinchristian.SSLPokeServlet.doGet(SSLPokeServlet.java:86)

代码:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    try {

        System.out.println(getClasspathString());
        System.out.println(getPropertiesString());

        SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory
                .getDefault();
        SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(
                "some_server", 443);

        InputStream in = sslsocket.getInputStream();
        OutputStream out = sslsocket.getOutputStream();



        // Write a test byte to get a reaction :)
        out.write(1);

        while (in.available() > 0) {
            System.out.print(in.read());
        }

        System.out.println("Successfully connected");

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

一些tomcat启动选项:

JAVA_OPTS='-server -Dapp.name=TEST -Dfile.encoding=ISO-8859-1 -XX:PermSize=128m  -XX:MaxPermSize=128m -Xms512m -Xmx2048m -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.ssl.trustStore=/export/home/user/some_server_certs -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.debug=all'

相同的代码、相同的 jvm、相同的证书在其他环境中工作。任何人都知道这会在哪里出错?

最佳答案

-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

首先摆脱它,它已经过时七年了。它仅适用于 JDK 1.3。

您的 JRE 安装有问题。重新安装,然后确保 Tomcat 使用的是新安装的版本。

关于java - tomcat ssl客户端握手java错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6147328/

相关文章:

tomcat - Tomcat 7.0 的 CPU 利用率为 100%

java - 如何在 Eclipse 远程调试器中找到有问题的线程?

java - 无法在映射器、MapReduce 中访问 hashmap

node.js - 在tomcat中集成easyrtc服务器

java - PGP 使用什么算法来使用密码加密私钥?

android - 如何在没有密码的情况下在android中存储私钥

security - 将 RSA 公钥转换为 PEM 格式

security - 无法使用 MongoDB super 用户从终端连接到其他数据库

Java:扩展数组大小,似乎无法将所有值保留在原始位置

java - Android中Activity之间的异常解析