質問

そうですね、4 つすべてが当てはまらないかもしれませんが、私の状況は次のとおりです。

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

Stomp サーバーと通信するには、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 プロトコルを有効にする以外は何も設定しませんでした。証明書などは持っていません。もしかしたらそれが問題なのでしょうか?

ご洞察をお待ちしております。

役に立ちましたか?

解決

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

他のヒント

<のhref = "のhttp://ファイル:///Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/Security/Reference/secureTransportRef/Reference/reference .htmlをお使いのMac の上の」REL = "nofollowをnoreferrer">セキュアトランスポート参照

エラーコードを参照するためにコードをもたらすために下にスクロールします。あなたが取得している一つが「errSSLUnknownRootCert」です。 (gtullyの答えを確認するようです。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top