2012-10-23 3 views
3

Salut les gars après avoir visité cette question: https://stackoverflow.com/a/5671038/1546070Autoriser Java Trust Store à accepter tous les certificats SSL?

J'ai vu quelques réponses et le meilleur était évidemment la réponse par so_mv. Maintenant, il semble que sa réponse est maintenant dépassée, parce que je l'ai essayé avec toutes les importations et le code exact, mais cela génère des tonnes d'erreurs. J'ai regardé dans la documentation pour voir si quelque chose a changé dans le java le plus récent, mais je n'arrive pas à trouver la cause. Je pense qu'une réponse à jour à cette question serait non seulement bénéfique pour moi, mais pour la communauté dans son ensemble. Merci.

Erreurs:

SecurityCheck.java:28: error: <identifier> expected 
     sc.init(null, new TrustManager[] { trm }, null); 
      ^
SecurityCheck.java:28: error: illegal start of type 
     sc.init(null, new TrustManager[] { trm }, null); 
       ^
SecurityCheck.java:28: error: illegal start of type 
     sc.init(null, new TrustManager[] { trm }, null); 
        ^
SecurityCheck.java:28: error: ')' expected 
     sc.init(null, new TrustManager[] { trm }, null); 
         ^
SecurityCheck.java:28: error: not a statement 
     sc.init(null, new TrustManager[] { trm }, null); 
             ^
SecurityCheck.java:28: error: ';' expected 
     sc.init(null, new TrustManager[] { trm }, null); 
              ^
SecurityCheck.java:28: error: illegal start of type 
     sc.init(null, new TrustManager[] { trm }, null); 
               ^
SecurityCheck.java:28: error: ';' expected 
     sc.init(null, new TrustManager[] { trm }, null); 
               ^
SecurityCheck.java:28: error: illegal start of type 
     sc.init(null, new TrustManager[] { trm }, null); 
                ^
SecurityCheck.java:28: error: <identifier> expected 
     sc.init(null, new TrustManager[] { trm }, null); 
                ^
SecurityCheck.java:28: error: ';' expected 
     sc.init(null, new TrustManager[] { trm }, null); 
                 ^
SecurityCheck.java:29: error: illegal start of type 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
         ^
SecurityCheck.java:29: error: <identifier> expected 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
                     ^
SecurityCheck.java:29: error: ';' expected 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
                     ^
SecurityCheck.java:29: error: illegal start of type 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
                     ^
SecurityCheck.java:29: error: <identifier> expected 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
                      ^
SecurityCheck.java:29: error: ';' expected 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
+0

Cela ne fonctionne probablement pas parce que vous utilisez la mauvaise version de Java pour que cela fonctionne. La question à laquelle vous avez lié utilise une classe 'com.sun. *', Qui est [fortement déconseillée] (http://stackoverflow.com/questions/1834826/it-is-a-bad-practice-to-use- suns-proprietary-java-classes) pour cette raison même, btw. Quant à la façon de le réparer, je ne suis pas entièrement sûr, désolé. – Brian

+0

Encore une bonne question si, donc +1 :) – Brian

+0

la réponse à laquelle je faisais référence n'utilise pas com.sun. * Elle change littéralement le gestionnaire de confiance. C'était la réponse dont je parlais, parce que j'ai lu à quel point l'utilisation de com.sun est mauvaise. – Twisterz

Répondre

1

Après avoir regardé vos erreurs, je pense que le problème est que vous avez mis le code directement dans le bloc class, mais il est censé être mis dans une méthode comme ceci:

// package here 
// imports here 
public class SecurityCheck 
{ 
    public void test() throws NoSuchAlgorithmException, KeyManagementException 
           // and any other exception here 
    { 
     // alternatively to throwing the exceptions to the caller, 
     // you can handle them here using a try-catch-block 

     // code from answer you linked to here 
    } 
} 

Je ne l'ai pas essayé et je ne sais pas si ce sont les seuls problèmes, mais cela expliquerait les erreurs que vous obtenez. Les premières lignes sont des déclarations variables et des initialisations valides dans un corps class, mais la ligne sc.init(null, new TrustManager[] { trm }, null); ne l'est pas (car c'est une déclaration) et doit être dans une méthode. C'est aussi la raison pour laquelle les erreurs commencent à cette ligne.

+0

Après avoir essayé cela, il me reste deux erreurs: 'SecurityCheck.java:28: erreur: exception non signalée NoSuchAlgorithmException; doit être intercepté ou déclaré comme étant lancé SSLContext sc = SSLContext.getInstance ("SSL"); ' ' SecurityCheck.java:29: erreur: exception non signalée KeyManagementException; sc_init (null, nouveau TrustManager [] {trm}, null); ' – Twisterz

+0

@Twisterz J'ai mis à jour ma réponse pour résoudre ce problème :-) – siegi

+0

qui devrait fonctionner, mais pour une raison quelconque Je reçois des erreurs en disant qu'il ne peut pas trouver le symbole "classe NoSuchAlgorithmException" et "classe KeyManagementException", je me sens stupide de ne pas être capable de résoudre cela par moi-même, je dois juste manquer quelque chose. – Twisterz

Questions connexes