錯誤:與ssl服務器的ssl握手。 After:client hello,server hello,certificate,server key exchange and server hello done。在網絡應用程序崩潰,: java.lang.NoClassDefFoundError:javax.crypto.SunJCE_btomcat ssl客戶端握手java錯誤
上出現的問題無法初始化類:
的Tomcat 6.0.29
嘗試了以下JVM:
1.5 ,1.6_22,1.6_25
現在正在運行:
Java的版本 Java版本 「1.6.0_25」 的Java(TM)SE運行時環境(建立1.6.0_25-B06) 的HotSpot的Java(TM)服務器VM(建立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,在其他環境中相同的證書工作。任何人都知道這可能出錯哪裏?
btw我可以通過簡單地在提示符上運行一個Java類來重現問題,從而從等式中消除了tomcat。該類是發現的SSLPoke [here](http://goo.gl/sS2v1),命令行是:java -Djavax.net.ssl.trustStore = ./ some_server_certs -Djavax.net.debug = all SSLPoke some_server。 com 443 – cgos 2011-05-27 11:58:07