SSL is very complex, vì vậy bạn sẽ muốn sử dụng thư viện.
Có một số tùy chọn, chẳng hạn như Keyczar, Botan, cryptlib, v.v. Mỗi thư viện (hoặc các thư viện được đề xuất bởi những người khác, chẳng hạn như Boost.Asio hoặc OpenSSL) sẽ có mã mẫu.
Trả lời câu hỏi thứ hai của bạn (cách tích hợp thư viện vào mã hiện tại mà không gây đau quá nhiều): tùy thuộc vào mã hiện tại của bạn. Nếu bạn đã có các hàm đơn giản gọi phương thức Winsock hoặc socket để gửi/nhận int
s, strings
, v.v ... thì bạn chỉ cần viết lại các đường ruột của các hàm đó. Và, tất nhiên, thay đổi mã thiết lập socket để bắt đầu. Mặt khác, nếu bạn gọi trực tiếp các chức năng Winsock/socket thì có thể bạn sẽ muốn viết các hàm có ngữ nghĩa tương tự nhưng gửi dữ liệu được mã hóa và thay thế các cuộc gọi Winsock bằng các chức năng đó.
Tuy nhiên, bạn có thể muốn xem xét chuyển sang một cái gì đó như Google Protocol Buffers hoặc Apache Thrift (a.k.a. Facebook Tiết kiệm). Tài liệu về Protocol Buffers của Google cho biết, "Trước các bộ đệm giao thức, đã có một định dạng cho các yêu cầu và phản hồi sử dụng marshalling tay/unmarshalling các yêu cầu và phản hồi, và hỗ trợ một số phiên bản của giao thức. ... "
Bạn hiện đang trong giai đoạn marshalling/unmarshalling. Nó có thể làm việc, và trong thực tế, một dự án tôi làm việc trên không sử dụng phương pháp này. Nhưng thật tuyệt vời khi để lại điều đó cho một thư viện; đặc biệt là một thư viện đã đưa ra một số suy nghĩ để cập nhật phần mềm trong tương lai.
Nếu bạn đi tuyến đường này, bạn sẽ thiết lập kết nối mạng của mình bằng thư viện SSL và sau đó bạn sẽ đẩy dữ liệu Bộ nhớ đệm/Protocol Buffer qua các kết nối đó. Đó là nó. Nó liên quan đến việc tái cấu trúc rộng rãi, nhưng bạn sẽ kết thúc với ít mã hơn để duy trì. Khi chúng tôi giới thiệu Protocol Buffers vào trong codebase của dự án mà tôi đã đề cập, chúng tôi có thể loại bỏ được khoảng 300 dòng mã marshalling/demarshalling.
Nguồn
2009-07-09 19:59:02
Hi, Max, Cảm ơn bạn đã thêm chi tiết. (Có lẽ câu hỏi ban đầu của tôi không được diễn đạt rõ ràng.) Câu trả lời của bạn cho biết thêm thông tin chi tiết nhấp vào cho tôi. Tôi có một quá trình dựa trên socket được mã hóa khá xấu xí trong mã thực hiện một loại "bắt tay" với máy chủ và đặc biệt thiết lập đường hầm cổng UDP. Phần còn lại của mã mạng được trừu tượng hóa thành các hàm trợ giúp loại "SendXMLViaTCPAndWaitForResponse()". Chỉ cần cắn đạn không phải là khó khăn, nó nên liên quan đến ít recoding vượt ra ngoài fcts helper. Cảm ơn một lần nữa cho việc đóng đinh này xuống. –