【发布时间】:2011-12-03 15:38:17
【问题描述】:
我编写了简单的 C 程序,它们使用套接字(“客户端”和“服务器”)。 (UNIX/Linux 用法)
服务器端简单地创建一个套接字:
sockfd = socket(AF_INET, SOCK_STREAM, 0);
然后将其绑定到 sockaddr:
bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
并倾听(并接受和阅读):
listen(sockfd,5);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
read(newsockfd,buffer,255);
客户端创建套接字,然后写入。
现在,我想将这个简单的连接转换为 SSL 连接,以最简单、最田园、最整洁和最快的方式。
我尝试将OpenSSL 添加到我的项目中,但我找不到一种简单的方法来实现我想要的。
【问题讨论】:
-
如果您正在寻找“安全连接”而不是 SSL,您可以查看位于您的应用程序外部的类似 proxychains.sourceforge.net 的内容,并将其设置为通过 SSH 发送流量联系。就应用程序内 SSL 而言,如果您了解 SSL/TLS 应该如何工作,那么 OpenSSL 非常容易。如果您想要替代方案,请尝试 yaSSL 或 gnuTLS 。
-
定义“简单方法”。 OpenSSl 是 C 程序员的标准。如果你有困难,你应该问一下。
-
检查这个An Introduction to OpenSSL Programming (Par t I)。第二部分对我来说太高级太难了。不过part2还是值得一看的。
-
同时检查Secure programming with the OpenSSL API。但我刚刚听到关于 Openssl 有多糟糕以及其他值得一试的替代方案的意见。
-
另一种选择是使用外部 SSL 包装工具,例如
stunnel,stunnel4软件包位于基于 Debian 的发行版中,并且易于使用。与在您的服务器中添加适当的 SSL 支持相比,存在一些限制,但它对于快速解决方案可能是有益的。我喜欢 stunnel,因为它似乎适合 UNIX 软件工具方法。