SSL is very complex이므로 라이브러리를 사용하려고합니다.
이 샘플 코드를가집니다 같은 Keyczar, Botan, cryptlib 등 각 (예 : Boost.Asio 또는 OpenSSL이 같은 다른 제안 또는 라이브러리)의 라이브러리를 모두 같은 몇 가지 옵션이 있습니다.
(방법 너무 많은 고통을 유발하지 않고 기존 코드에 라이브러리 통합하는 방법) 두 번째 질문에 대답 : 당신의 현재 코드에 의존하는 것입니다. 이미 Winsock 또는 소켓 메서드를 호출하여 int
, strings
등을 보내거나받는 간단한 함수가있는 경우 해당 함수의 내용을 다시 작성하면됩니다. 그리고 물론 소켓을 설정하는 코드를 변경하십시오.
반면에 Winsock/socket 함수를 직접 호출하는 경우 비슷한 의미론을 가진 함수를 작성하고 암호화 된 데이터를 보내고 Winsock 호출을 해당 함수로 바꿔야 할 것입니다.
그러나 Google Protocol Buffers 또는 Apache Thrift (a.k.a Facebook Thrift)으로 전환하는 것이 좋습니다. Google의 프로토콜 버퍼 설명서에는 "프로토콜 버퍼 이전에는 요청 및 응답의 수동 정렬/비 정렬을 사용한 요청 및 응답 형식이 있었으며 여러 프로토콜 버전이 지원되어 매우 추악한 코드가 생성되었습니다. ... "
현재 마샬링/언 마샬링 단계에 있습니다. 그것은 작동 할 수 있고, 사실 내가 작업하는 프로젝트는이 방법을 사용합니다. 그러나 도서관에 보관하는 것이 훨씬 더 좋습니다. 특히 미래의 소프트웨어 업데이트에 대해 이미 생각해 봤던 도서관이 있습니다.
이 라우트로 간다면 SSL 라이브러리로 네트워크 연결을 설정 한 다음 Thrift/Protocol Buffer 데이터를 해당 연결로 푸시 할 수 있습니다. 그게 전부 야. 광범위한 리팩토링이 필요하지만 유지 보수 할 코드가 적어집니다. 우리가 언급 한 프로젝트의 코드베이스에 프로토콜 버퍼를 도입했을 때 약 300 행의 마샬링/디 마샬링 코드를 제거 할 수있었습니다.
안녕, 맥스, 을
그들은뿐만 아니라 당신의 기존 코드에 CyaSSL 추가에 대한 접촉의 SSL 튜토리얼이 추가 세부 정보 주셔서 감사합니다. (아마도 내 원래의 질문은 명확하게 말하지 않았을 것입니다.) 당신의 답은 저를 클릭하는 통찰력을 추가합니다. 나는 서버와 "일종의"악수 (handshake)를 수행하는 코드에서 소켓을 기반으로 한 프로세스를 꽤 못생긴 손으로 코드화했으며, 특별히 UDP 포트 터널링을 설정한다. 나머지 네트워크 코드는 "SendXMLViaTCPAndWaitForResponse()"유형 도우미 함수로 추상화되어 있습니다. 총알을 무는 것이 그렇게 힘들지 않아야하며, 도우미 fcts를 초월한 기록이 거의 필요하지 않습니다. 이 문제에 대해 다시 한 번 고마워합니다. –