2013-02-04 2 views
5

HTTP를 통해 고유 한 프로토콜을 CPP로 개발했으며이를 사용하여 내 서버와 통신합니다. 이제 독점적 인 프로토콜을 통해 SSL 연결을 설정하여 데이터 자체를 전송하려고합니다.OpenSSL을 맞춤 채널과 함께 사용

나는 그것이에는 OpenSSL을 사용 할 수 있습니까? 웹을 검색했는데 BIO와 관련된 것이었지만 내 요구에 어떻게 사용하는지 이해하지 못했습니다.

어쨌든, 저에게 가장 좋은 해결책은 저의 독점적 인 OpenSSL을 전달할 수있는 방법이 될 것입니다. & 함수를 수신하면 모든 통신 자체가 내 기능을 통해서만 전달됩니다. 앞서

TNX :

+0

"HTTP를 통한 고유 프로토콜"이라고 말하면 HTTP 확장 또는 HTTP 라이브러리를 통해 자체 메시지를 교환하는 프로토콜을 의미합니까? – Bruno

+0

두 번째 옵션 - 자체 메시지가 있고 HTTP를 사용하여 클라이언트와 서버간에 전달하는 프로토콜입니다. – user2039197

+0

[Application-Layer Protocol Negotiation] (https://tools.ietf.org/html/rfc7301)도 조사해야합니다. HTTP/2가 HTTPS를 통해 구현되는 방법. – jww

답변

10

사용 BIO 쌍. ssltest.c 프로그램에서 예제를 찾을 수 있습니다. 소스를 bio_pair으로 검색하십시오. 기본 개념은 OpenSSL 엔진을 블랙 박스로 취급한다는 것입니다. 당신은 다른 측면에 연결을 통해 암호화 된 데이터를받을 때

  1. , 당신은 SSL 엔진의 암호화 된 BIO에 기록해야한다 :

    은 할 수 코드가이 네 가지가 있습니다.

  2. 는 SSL 엔진이 반대편으로 암호화 된 데이터를 보내려고

    , 당신은 SSL 엔진의 암호화 된 BIO에서를 읽고 상대방에 전송해야합니다. 당신은 암호화하고 보낼 일반 텍스트가있을 때

  3. , 당신은 SSL 엔진의 일반 텍스트 BIO에 기록해야한다. 는 SSL 엔진이 당신을 위해 암호를 해독 한 일반 텍스트있다

  4. , 당신은 SSL 엔진의 일반 텍스트 BIO에서 읽을해야합니다.

는 OpenSSL을는 SSL 프로토콜은 다음 두 BIOS 간 데이터 이동 엔진으로 순수하게 작용한다. 이 네 가지 데이터 스트림을 모두 움직이면 모든 프로토콜 협상 및 작업을 수행합니다. 나는 당신을 줄 수

한주의는 이것이다 - 이런 것들 사이의 특별한 관계를 생각하지 않습니다. 예를 들어, 암호화 및 전송하려는 일부 일반 텍스트가있을 수 있으며이를 SSL 엔진의 일반 텍스트 BIO에 쓸 때 SSL 엔진은 다른 쪽에서 암호화 된 데이터를 수신 할 때까지 진행을 진행하지 못할 수도 있습니다. SSL 엔진을 블랙 박스로 취급하고 가능할 때마다이 네 가지를 수행하십시오. SSL 엔진을 "조사"하려고하지 마십시오. 예를 들어, SSL 엔진에 암호화 된 데이터를 전달했기 때문에 반드시 평문을 사용해야합니다. 그것은 가능할 수도 있지만 암호화 된 데이터를 다른쪽에 보내야 할 수도 있습니다.

또 다른주의 : SSL 엔진이 하나의 상태를 가지고있다. 읽기 상태 W 쓰기 상태는 없습니다. (추악한 세부 사항을 원한다면 "the nightmare scenario"에 대해 this thread을 검색하십시오.) 다중 스레드로 SSL 연결을 사용하고 TCP 연결처럼 동작 할 것으로 기대할 때 이것은 가장 큰 가능성이 있습니다 (읽기 및 쓰기면 치명적인 오류 또는 연결 종료의 경우를 제외하고는 독립적입니다.

+0

TNX !! 나는 이것을 점검하고 나를 위해 그것이 효과가 있는지 볼 것이다. – user2039197

0

두 번째 옵션 - 자체 메시지가 있고 HTTP를 사용하여 클라이언트와 서버간에 전달합니다.

자신의 메시지를 전달하는 데 SSL을 사용하는 경우 SSL/TLS 용 OpenSSL을 사용하면 나만의 HTTP 라이브러리 라이브러리를 작성해야합니다.

대신 OpenSSL을 통해 HTTPS (대부분 할)를 지원하는 HTTP 라이브러리를 사용하십시오. HTTPS를 기반으로 사용자 정의 메시지를 교환하는 것은 투명하고 일반 HTTP를 사용하는 것과 비슷해야합니다. HTTPS를 정상적으로 구성하면됩니다.

관련 문제