문제

글쎄, 아마도 4 가지가 모두 있지는 않지만 여기에 내 상황이 있습니다.

ActiveMQ 백엔드가 있습니다 (데스크탑 Mac에서 실행). 기본적으로 Echo 서버로 사용하여 로그를 꼬리고 클라이언트를 디버깅하는 스톡 아파치 ActiveMQ 서버입니다. 클라이언트는 AsyncSocket을 사용하여 해킹 된 stomp.framework 구현이있는 iPhone 프로젝트입니다.

Asyncsocket Cocoa 라이브러리를 사용하여 스톰프 서버와 대화해야합니다. 나는 대기열에 메시지를 보낼 수 있고 다시 읽을 수 있으므로 나는 거기에 좋다고 생각합니다.

그러나 SSL (요구 사항)을 사용하도록 모든 것을 설정하려고 할 때 NSERROR 객체에서 다음 오류 설명을 얻습니다.

kCFStreamErrorDomainSSL error -9812.

나는이 오류 코드가 무엇인지 알아낼 수 없습니다. 누구든지 단서가 있습니까?

AsyncSocket 용 SSL 물건을 설정하는 방법은 다음과 같습니다.

편집 : 여기에 올바른 코드를 추가했습니다. 자체 서명 된 CERT에 주목하십시오.

//- (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을 통해 SSL을 사용하는 것 외에는 다른 구성을하지 않았습니다. 인증서 나 그와 비슷한 것이 없습니다. 아마도 그게 문제일까요?

모든 통찰력에 감사드립니다!

도움이 되었습니까?

해결책

오류 코드의 세부 사항에 대해서는 알지 못하지만 ActiveMQ와 함께 배송되는 CERT는 TESTING 만 사용하기위한 것입니다. 그들은 자체 서명 된 cert (본질적으로 유효하지 않은)로, 체인 길이를 검증하려는 클라이언트 측 SSL 라이브러리를 던질 수 있습니다. 에서 SSL 브로커 테스트 인증서는 클라이언트가 검증을 시도하지 않고 수락 할 수 있도록 Trust Store에 명시 적으로 추가됩니다. 좋은 시작은 브로커에 대한 유효한 CERT를 생성하거나 AsyncSocket에서 사용하는 신뢰 스토어에 기존 인증서를 추가하는 방법을 알아내는 것입니다 (링크 된 Java 테스트 코드가 도움이 될 수 있습니다).

다른 팁

Mac에서 보안 전송 참조

결과 코드로 아래로 스크롤하여 오류 코드를보십시오. 당신이받는 것은 "errsslunknownrootcert"입니다. (Gtully의 답변을 확인하는 것 같습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top