2008-12-19 4 views
2

Eh bien, peut-être pas avec les 4 choses, mais voici ma situation:cacao, Stomp, ActiveMQ, iPhone, SSL, et AsyncSocket Besoin d'aide

J'ai un back-end ActiveMQ (en cours d'exécution sur mon ordinateur de bureau Mac). C'est un serveur Apache ActiveMQ que j'utilise en tant que serveur d'écho pour sauvegarder les logs et déboguer mon client. Le client est un projet iPhone avec une implémentation Stomp.framework piratée utilisant AsyncSocket.

J'ai besoin d'utiliser la bibliothèque AsyncSocket Cocoa pour parler au serveur Stomp, sur lequel je travaille plus ou moins. Je peux envoyer des messages aux files d'attente, et les relire, donc je pense que je suis bon là-bas.

MAIS, quand j'essaie de tout mettre en place pour utiliser SSL (également une exigence) Je reçois la description de l'erreur suivante de l'objet NSError je reviens:

kCFStreamErrorDomainSSL error -9812. 

Je ne peux pas pour la vie de moi comprendre ce que ce code d'erreur est. Quelqu'un a une idée?

Voici comment je configurer le stuff SSL pour AsyncSocket:

EDIT: LE BON CODE AJOUTÉE ICI. REMARQUE CERTS AUTO-SIGNÉS.

//- (BOOL)onSocketWillConnect:(AsyncSocket *)sock 
{ 
// Connecting to a secure server 
NSMutableDictionary * settings = [NSMutableDictionary dictionaryWithCapacity:2]; 

// Use the highest possible security 
[settings setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL 
      forKey:(NSString *)kCFStreamSSLLevel]; 

// Allow self-signed certificates 
[settings setObject:[NSNumber numberWithBool:YES] 
      forKey:(NSString *)kCFStreamSSLAllowsAnyRoot]; 

CFReadStreamSetProperty([sock getCFReadStream], 
         kCFStreamPropertySSLSettings, (CFDictionaryRef)settings); 
CFWriteStreamSetProperty([sock getCFWriteStream], 
         kCFStreamPropertySSLSettings, (CFDictionaryRef)settings); 

return YES; 

}

Quelqu'un a des idées? Je pense Je définis les propriétés de flux correctement. Peut-être que c'est quelque chose à voir avec l'installation ActiveMQ? Je n'ai pas fait de configuration autre que d'activer le protocole SSL sur Stomp dans ActiveMQ. Je n'ai pas de certificat ou quoi que ce soit de pareil. Peut-être que c'est le problème?

Toute idée est appréciée!

+0

L'auteur de la bibliothèque m'a mis au clair. ActiveMQ a un certificat non approuvé, donc le code CFNetwork ne lui fait pas confiance. Vous devez indiquer explicitement que vous souhaitez autoriser les certificats non approuvés à l'aide de cette propriété: kCFStreamSSLAllowsAnyRoot. Si quelqu'un veut un code d'échantillon, je peux l'ajouter ci-dessus. Juste crier. – Genericrich

+0

Juste aller de l'avant et ajouter, quelqu'un venant ici de Google dans plusieurs mois pourrait le trouver utile si rien d'autre. :) –

Répondre

2

Aucune idée sur les spécificités du code d'erreur mais je peux vous dire que les certs qui sont livrés avec activemq sont noddy, destinés uniquement aux tests. Ce sont des certificats auto-signés (essentiellement invalides) qui peuvent lancer une bibliothèque SSL côté client qui essaie de valider leur longueur de chaîne. Dans le ssl broker test, le certificat est explicitement ajouté au magasin de confiance afin que le client puisse l'accepter plutôt que d'essayer de le valider. Un bon début serait de générer des certificats valides pour le courtier ou de trouver un moyen d'ajouter le CERT existant au magasin de confiance utilisé par AsyncSocket (ne savez pas comment cela est configuré, peut-être le code de test java lié aidera)

0

Secure Transport reference on your Mac

Faites défiler jusqu'à codes de résultat pour voir les codes d'erreur. Celui que vous obtenez est "errSSLUnknownRootCert". (Il semble confirmer la réponse de gtully.)

Questions connexes