Faire une connexion HTTPS à l'aide de l'URL.openConnection()

Je suis en train de faire une connexion HTTPS pour une serveur qui a un certificat à échéance en avril 2013 et utilise GlobalSign que le certificat racine.

HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
//urlConnection.setSSLSocketFactory(sslSocketFactory);
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);

//Send the POST data
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write(postParamString.toString().getBytes("UTF8"));

//Read the reply
InputStream in = urlConnection.getInputStream();

Comme il se trouve, cela jette javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate signature. quand getOutputStream() est appelé.

Ce même site et le certificat sont valides dans le stock HTC navigateur web et les navigateurs de bureau. Lorsque j'utilise le même code pour l'accès Google il fonctionne (mais alors se plaint d'une erreur 404). Divers postes sur StackOverflow n'implique pas qu'il devait tout simplement "travail" et d'autres disent à mettre en place votre propre magasin de clés (ou de désactiver tous les HTTPS validation!!!) Je suppose que la différence de comportement est en baisse de racine différente de la clé de magasins en cours d'utilisation (quelqu'un Peut confirmer?).

J'ai essayé aujourd'hui la création d'un magasin de clés à l'aide de château gonflable, mais je ne peux pas obtenir ce pour charger sur mon appareil.

Après l'exportation du certificat à partir de Firefox, j'ai créer un magasin de clés à l'aide de:

keytool.exe -import -alias onlinescoutmanager -file www.onlinescoutmanager.co.uk.crt -storetype BKS -keystore res\raw\keystore

C'est alors chargé et utilisé dans l'application à l'aide:

InputStream stream = context.getResources().openRawResource(R.raw.keystore);
//BKS seems to be the default but we want to be explicit
KeyStore ks = KeyStore.getInstance("BKS");
ks.load(stream, "www.onlinescoutmanager.co.uk".toCharArray());
stream.close();

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SSLContext context2 = SSLContext.getInstance("TLS");
context2.init(null, new TrustManager[] { defaultTrustManager }, null);
sslSocketFactory = context2.getSocketFactory();

C'est à défaut avec java.io.IOException: Wrong version of key store. quand keystore.Load() est appelé.

J'ai assuré que je suis de passage -storetype BKS, utilisé un <=7 caractères du mot de passe du fichier de clés, a ajouté le CA certs de la clé de stockage, et à l'aide de deux Château Gonflable version 1.45 et 1,47 pour créer le magasin de clés avec aucun changement dans le message d'erreur signalé.

Mon environnement Eclipse Juno 4.2.1 avec le JRE 1.7u9b5 en cours d'exécution sur Windows 8. L'appareil que je suis en essais sur un HTC sensation courir stock Android 2.3. L'application dispose d'un minimum version du SDK de 7 et un objectif de 15.

Si quelqu'un peut expliquer comment créer un valide BKS touche store sur Windows 8 comment puis-je obtenir Java à utiliser la même clé de stockage comme le navigateur(ou système?) que serait appréciée.

Vous pouvez télécharger le tout le projet qu'il l'était au moment de la rédaction, et la généré keystore si nécessaire.

C'est certainement la meilleure question formulée j'ai jamais vu, sur n'importe quel site
J'ai eu pour réponse un peu, je devrais connaître les règles et la façon de "poser un décent question" :p
lorsque vous créez le fichier de clés, si vous avez -trustedcacerts dans les options de sorte qu'il permettra de valider le cert à l'aide de la confiance des certs? (neve travaillé avec BKS deviner sur la base de java similitudes)
toutes mes excuses, faute de frappe. Devrait -trustcacerts. J'espère que cela fonctionne, si non je vais le laisser à des personnes qui ont effectivement utilisé BKS
J'ai essayé d'ajouter de confiance et de deux CA certs au-dessus d'elle pour le fichier de clés aussi, mais avec le même résultat :|.

OriginalL'auteur Deanna | 2013-01-01