2017-10-13 1 views
0

정상적인 SSL 핸드 셰이크 중에 클라이언트가 서버의 인증서를 받고 확인한 다음 서버의 공개 키를 사용하여 세션 키를 암호화한다는 사실을 알고 있습니다.클라이언트가 미리 저장된 서버의 인증서를 사용하여 SSL 핸드 셰이크를 수행하는 방법은 무엇입니까?

Linux의 C 언어로 SSL 클라이언트를 작성하고 싶습니다. SSL 핸드 셰이크 중에 서버의 인증서를 기다릴 필요가 없으며 이전에 이미 다운로드 한 서버의 공개 키로 암호화 된 세션 키를 보냅니다.

OpenSSL을 사용하는 방법을 배우고 있습니다. 여기서는 do-handshake 부분 만 있으면됩니다.

감사합니다. 왜 이렇게해야합니까? ISP 또는 게이트웨이는 인증서의 검열을 수행하고 인증서의 이름에 따라 연결을 차단할 수 있습니다.

+0

왜? 서버가 인증서를 보내지 않도록 어떻게 말하는가? 변경된 인증서는 어떻게 처리합니까? 나에게 나쁜 생각인데, 이것이 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) 일 수 있습니까? –

+0

이렇게하려면 클라이언트와 서버 코드에 모두 액세스해야하며 구현 된 후에는 클라이언트와 서버간에이 핸드 셰이크가 작동합니다. 즉 서버가 다른 클라이언트와 통신 할 수 없습니다. – mnistic

+0

"* 클라이언트가 SSL 핸드 셰이크를 위해 미리 저장된 서버의 인증서를 어떻게 사용할 수 있습니까? *"서버가 클라이언트에 보낸 것을 무시하고 사용하면됩니까? – alk

답변

1

불행히도, 이것은 불가능합니다. SSL (또는 TLS) 프로토콜의 일부로 서버는 항상 인증서를 보냅니다.

ISP 검열을 우회하려면 VPN 또는 Tor를 사용하는 것이 좋습니다.

+1

두 동료가 '익명'또는 PSK 또는 SRP 키 교환 중 하나를 지원하고 동의하지 않는 한 - 공개 서버는이를 수행하지 않습니다. 당신은 자신의 서버를 운영해야만하고, 그렇게한다면 무해하다고 선택한 이름으로 일반 인증서 기반의 키 교환을보다 쉽게 ​​(덜 눈에 띄게) 사용할 수 있습니다. –

+0

@ dave_thompson_085 클라이언트가 인증서를받는 척 (미리 저장된 인증서 사용)하고 어쨌든 핸드 셰이크를 수행 할 수 있습니까? – judian

+0

@ judian : 가능성이 없습니다. ISP 나 다른 MitM이 TCP에서 인증서 메시지를 스 프라이밍했지만 조정 된 순서 번호 매기기를 포함하여 나머지 모든 것을 남기면 원칙적으로 핸드 셰이크가 계속 진행될 수 있으므로 인증서 메시지 (단 하나의 인증서가 아님) _perfectly_ 비트를 가짜로 만들 수 있습니다. 전체 항공편이 아닌 인증서 메시지 여야합니다. 여전히 serverhello가 필요하고 종종 serverkx가 필요합니다. 그러나 실제로 MitM은 서버가 인증서를 보내지 않는 한 연결을 완전히 차단합니다. 서버가 실행되면 (또는 친구가 실행되는 경우에만) 발생합니다. _ 그리고 SNI를 사용 중지합니다. –

관련 문제