openSSL 관련 질문 드립니다.
글쓴이: 불량청년 / 작성시간: 금, 2016/12/16 - 11:45오전
openSSL 사용하여 서버/클라이언트 통신을 잘 하고 있었습니다.
몇일전 특정서버와 핸드쉐이크 할때 protocol version miss match라는 error가 발생하면서
핸드쉐이크가 이루어 지지 않아 확인해 보니 아래 코드 때문에 그렇더군요.
method = (SSL_METHID *)TLSv1_client_method(); ctx = SSL_CTX_new(method);
위 TLSv1_client_method()를 SSLv23_client_method(); 로 바꿔주니 정상적으로 핸드쉐이크가 이루어지고
동작이 잘 됩니다.
method = (SSL_METHID *)SSLv23_client_method(); ctx = SSL_CTX_new(method);
서버쪽에서 클라이언트에서 사용하는 버젼보다 상위 버젼을 사용해서 문제가 발생된 것으로 추측됩니다.
한가지 궁금한 점이 있는데 ssl.h 파일을 보면 SSL_METHOD 포인터를 리턴하는 client_method 함수들이 여러게가 있습니다.
SSL_METHOD *SSLv2_method(void); /* SSLv2 */ SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ SSL_METHOD *SSLv3_method(void); /* SSLv3 */ SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ SSL_METHOD *SSLv23_method(void); /* SSLv3 but can rollback to v2 */ SSL_METHOD *SSLv23_server_method(void); /* SSLv3 but can rollback to v2 */ SSL_METHOD *SSLv23_client_method(void); /* SSLv3 but can rollback to v2 */ SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */
버전의 차이란건 알겠는데 SSL/TLS 섹션을 따로 둔 이유가 궁금합니다.
서버쪽의 구현이 TLS나 SSL로 구현되어 있다면 클라이언트도 이것제 맞게 해줘야 한다는 말인가요?
만약 그렇다면 클라이언트에선 어떻게 서버쪽 사용 메서드를 알 수 있을까요?
Forums:
자문자답 입니다.
Manual:SSL CTX new(3) - OpenSSLWiki
SSLv23_method(void), SSLv23_server_method(void), SSLv23_client_method(void)A TLS/SSL connection established with these methods may understand the SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols. If extensions are required (for example server name) a client will send out TLSv1 client hello messages including extensions and will indicate that it also understands TLSv1.1, TLSv1.2 and permits a fallback to SSLv3. A server will support SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols. This is the best choice when compatibility is a concern.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
댓글 달기