방법을 사용하는 TLS
핸드 셰이크를 사용하여 피어 투 피어 통신을 암호화하려고했습니다. GCDAsyncSocket
라이브러리입니다. Bonjour 서비스는 서버에서 게시하고 클라이언트는 게시 된 호스트 이름에 연결합니다. 소켓 연결이 설정되면 아래 그림과 같이 서버에 대해 startTLS
을 호출합니다.bonjour를 사용하는 GCDAsyncSocket 서비스 : startTLS가 TLS 핸드 셰이크를 시작합니다.
[settings setObject:[NSNumber numberWithBool:YES]
forKey:(NSString *)kCFStreamSSLIsServer];
[settings setObject:(__bridge id _Nonnull)(certs)
forKey:(NSString *)kCFStreamSSLCertificates];
CFRelease(certs);
settings[GCDAsyncSocketSSLProtocolVersionMin] = [NSNumber numberWithInteger:8];
[connectedSockets addObject:newSocket];
[newSocket startTLS:settings];
아래의 클라이언트 측 설정은 내가 사용하고있는 설정입니다.
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
settings[GCDAsyncSocketSSLProtocolVersionMin] = [NSNumber numberWithInteger:4];
settings[GCDAsyncSocketSSLProtocolVersionMax] = [NSNumber numberWithInteger:8];
[settings setObject:[NSNumber numberWithBool:YES]
forKey:GCDAsyncSocketManuallyEvaluateTrust];
[settings setObject:(__bridge id _Nonnull)(certs)
forKey:(NSString *)kCFStreamSSLCertificates];
[sock startTLS:settings];
클라이언트와 서버간에이 핸드 셰이크가 시작된 후. wireshark
의 도움으로이 두 가지 사이의 데이터 전송을 디버깅했습니다. 로그에서 핸드 셰이크가 TLS
이 아닌 TCP 프로토콜에서 발생하고 있음을 보여줍니다. 핸드 셰이크가 TLSv1.2 프로토콜에서 발생해야합니다. 동일한 스크린 샷을 첨부합니다. 시체로 샘플 코드를 도울 수 있습니까?
SSL/TLS와 핸드 쉐이크에 대해 읽어야합니다. 악수는 TLS 터널을 설정하는 데 필요한 것입니다. 그것은 열려있는 TCP 채널을 통해 이루어져야하며 다른 방법은 없습니다. TLS에서 핸드 셰이크를 수행하는 유일한 방법은 이미 설정된 TLS 터널에서 TLS를 시작하는 것입니다. – creker
@creker 이제 TCP 프로토콜에서만 ssl 핸드 셰이크가 발생합니다. TLSv1.2 프로토콜이 언제 나타날지 알려주십시오. – Gyanendra
성공적인 핸드 셰이크 후 – creker