你有没有在java.security文件中设置security.provider?
我在apache上配ssl时是在里面有这样的句子:security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.rsajca.Provider

解决方案 »

  1.   

    另外还可能你没有加handler, 这样加:-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol或者:System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
      

  2.   

    第三种可能就是你的证书不对,参考下面的函数:static class MyListener implements javax.net.ssl.HandshakeCompletedListener  {    
    public void handshakeCompleted(javax.net.ssl.HandshakeCompletedEvent event)    {      
    SSLSession session = event.getSession();      
    System.out.println("Handshake Completed with peer " + session.getPeerHost());      
    System.out.println("cipher: " + session.getCipherSuite());      
    javax.security.cert.X509Certificate[] certs = null;      
    try{       
    certs = session.getPeerCertificateChain();      
    }catch (javax.net.ssl.SSLPeerUnverifiedException puv){        
    certs = null;      
    }      
    if  (certs != null){        
    System.out.println("peer certificates:");        
    for (int z=0; z<certs.length; z++) 
    System.out.println("certs["+z+"]: " + certs[z]);
    }else{        
    System.out.println("No peer certificates presented");      
    }    
    }  
    }