2

まあ、4つのことすべてではないかもしれませんが、私の状況は次のとおりです。

ActiveMQ バックエンドがあります (デスクトップ Mac で実行されています)。これは、基本的にログを追跡してクライアントをデバッグするためのエコー サーバーとして使用しているストック Apache ActiveMQ サーバーです。クライアントは、AsyncSocket を使用して Stomp.framework 実装をハッキングした iPhone プロジェクトです。

AsyncSocket Cocoa ライブラリを使用して Stomp サーバーと通信する必要がありますが、これは多かれ少なかれ機能しています。メッセージをキューに送信し、それらを読み返すことができるので、そこは得意だと思います。

しかし、SSL を使用するようにすべてを設定しようとすると (要件でもあります)、返される NSError オブジェクトから次のエラーの説明が表示されます。

kCFStreamErrorDomainSSL error -9812.

私は一生、このエラーコードが何であるかを理解できません。誰にも手がかりがありますか?

AsyncSocket の SSL をセットアップする方法は次のとおりです。

編集:ここに正しいコードを追加しました。自己署名証明書に注意してください。

//- (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;

}

誰にもアイデアはありますか?ストリームのプロパティを正しく設定していると思います。多分それはActiveMQセットアップと関係がありますか? ActiveMQ で SSL over Stomp プロトコルを有効にする以外の構成は行いませんでした。証明書などはありません。たぶんそれが問題ですか?

どんな洞察も大歓迎です!

4

2 に答える 2

2

エラーコードの詳細についてはわかりませんが、activemq に同梱されている証明書は、テストのみを目的としたものであると言えます。これらは自己署名証明書 (本質的に無効) であり、チェーンの長さを検証しようとするクライアント側の SSL ライブラリをスローできます。ssl ブローカー テストでは、クライアントが証明書を検証するのではなく受け入れることができるように、証明書がトラスト ストアに明示的に追加されます。ブローカーの有効な証明書を生成するか、既存の証明書を AsyncSocket が使用するトラスト ストアに追加する方法を見つけることから始めるとよいでしょう (どのように構成されているかはわかりませんが、リンクされた Java テスト コードが役立つ可能性があります)。

于 2008-12-19T11:57:13.230 に答える
0

Mac でのセキュア トランスポートのリファレンス

結果コードまで下にスクロールして、エラー コードを確認します。あなたが得ているのは"errSSLUnknownRootCert". (gtulyの答えを確認しているようです。)

于 2009-01-05T20:16:17.240 に答える