일반적으로 C 또는 C++에서 SSL/TLS 암호화된 TCP 소켓을 통해 통신하려면 읽기 및 쓰기를 수행하기 위해 SSL/TLS 공급자(OpenSSL, GnuTLS 등)가 제공하는 모든 기능을 사용해야 합니다. 예: BIO_write, BIO_read 등
소켓에서 읽고 쓰는 C 루틴이 있고 해당 연결을 통해 암호화된 통신을 수행할 수 있도록 TLS 소켓을 전달할 수 있기를 원합니다. 그러나 그대로 유지하려면 BIO_read, BIO_write 등의 루틴을 사용하도록 함수를 다시 작성해야 합니다.
이상적으로는 소켓을 사용하는 루틴이 필요하지 않도록 사용자 공간에서 쓰고 읽는 모든 데이터를 자동으로 암호화/해독(예: "투명하게")하는 소켓을 생성하거나 기존 소켓을 변환하는 방법이 있습니까? 데이터 전송 방법을 걱정하시나요? 아니면 사용할 읽기/쓰기 루틴을 선택하는 읽기/쓰기에 대한 래퍼 루틴을 만드는 것이 더 낫습니까?
답변1
UCSPI-SSL 제품군은 이러한 목적으로 사용되는 도구 세트 제품군 중 하나입니다. William Baxter의 ucspi-ssl 패키지는 Scott Gifford의 ucspi-ssl 패키지를 생성했고, 이는 다시 Erwin Hoffman의 ucspi-ssl 패키지를 생성했습니다. 각각에서 sslserver
들어오는 연결 수락, SSL 핸드셰이크, 데이터 암호화/해독을 처리하는 프로그램을 실행하는 것으로 시작하며 , 프로그램은 일반 도구처럼 표준 입력 및 출력을 통해 일반 텍스트를 처리합니다.
Gerrit Pape는 sslsvd
유사한 작업을 수행할 수 있는 ipsvd 도구 세트의 도구 중 하나입니다.
추가 읽기
답변2
바라보다autossl.so이는 LD_PRELOAD
클라이언트 애플리케이션을 수정하지 않고 일반 텍스트 소켓을 SSL/TLS로 업그레이드하는 공유 가능한 라이브러리입니다.
면책 조항 : 나는 이것을 썼습니다.