사용 BIO 쌍. ssltest.c 프로그램에서 예제를 찾을 수 있습니다. 소스를 bio_pair
으로 검색하십시오. 기본 개념은 OpenSSL 엔진을 블랙 박스로 취급한다는 것입니다. 당신은 다른 측면에 연결을 통해 암호화 된 데이터를받을 때
, 당신은 SSL 엔진의 암호화 된 BIO에 기록해야한다 :
은 할 수 코드가이 네 가지가 있습니다.
는 SSL 엔진이 반대편으로 암호화 된 데이터를 보내려고
, 당신은 SSL 엔진의 암호화 된 BIO에서를 읽고 상대방에 전송해야합니다. 당신은 암호화하고 보낼 일반 텍스트가있을 때
, 당신은 SSL 엔진의 일반 텍스트 BIO에 기록해야한다. 는 SSL 엔진이 당신을 위해 암호를 해독 한 일반 텍스트있다
는
, 당신은 SSL 엔진의 일반 텍스트 BIO에서 읽을해야합니다.
는 OpenSSL을는 SSL 프로토콜은 다음 두 BIOS 간 데이터 이동 엔진으로 순수하게 작용한다. 이 네 가지 데이터 스트림을 모두 움직이면 모든 프로토콜 협상 및 작업을 수행합니다. 나는 당신을 줄 수
한주의는 이것이다 - 이런 것들 사이의 특별한 관계를 생각하지 않습니다. 예를 들어, 암호화 및 전송하려는 일부 일반 텍스트가있을 수 있으며이를 SSL 엔진의 일반 텍스트 BIO에 쓸 때 SSL 엔진은 다른 쪽에서 암호화 된 데이터를 수신 할 때까지 진행을 진행하지 못할 수도 있습니다. SSL 엔진을 블랙 박스로 취급하고 가능할 때마다이 네 가지를 수행하십시오. SSL 엔진을 "조사"하려고하지 마십시오. 예를 들어, SSL 엔진에 암호화 된 데이터를 전달했기 때문에 반드시 평문을 사용해야합니다. 그것은 가능할 수도 있지만 암호화 된 데이터를 다른쪽에 보내야 할 수도 있습니다.
또 다른주의 : SSL 엔진이 하나의 상태를 가지고있다. 읽기 상태 W 쓰기 상태는 없습니다. (추악한 세부 사항을 원한다면 "the nightmare scenario"에 대해 this thread을 검색하십시오.) 다중 스레드로 SSL 연결을 사용하고 TCP 연결처럼 동작 할 것으로 기대할 때 이것은 가장 큰 가능성이 있습니다 (읽기 및 쓰기면 치명적인 오류 또는 연결 종료의 경우를 제외하고는 독립적입니다.
"HTTP를 통한 고유 프로토콜"이라고 말하면 HTTP 확장 또는 HTTP 라이브러리를 통해 자체 메시지를 교환하는 프로토콜을 의미합니까? – Bruno
두 번째 옵션 - 자체 메시지가 있고 HTTP를 사용하여 클라이언트와 서버간에 전달하는 프로토콜입니다. – user2039197
[Application-Layer Protocol Negotiation] (https://tools.ietf.org/html/rfc7301)도 조사해야합니다. HTTP/2가 HTTPS를 통해 구현되는 방법. – jww