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!
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
Juste aller de l'avant et ajouter, quelqu'un venant ici de Google dans plusieurs mois pourrait le trouver utile si rien d'autre. :) –