我正在尝试开发一个仅限客户端的最小SSL/TLS应用程序,以连接到https服务器。它总是在'SSL_connect((上失败。我还没有安装任何证书
在这种情况下需要证明吗
我在SO和其他地方发现了许多答案,这些答案都说"不",并带有警告"除非服务器要求">。
详细信息:
- 我使用的是从源代码构建的GitHub:OpenSSL包
- connect之前的所有SSL调用都成功
- 在调试时,我看到函数"SSL_do_handshake"[返回-1]中出现错误
- 我尝试了几个不同的https服务器,结果都是一样的
- 我在Dell Optiplex Win10/64机器上使用MSVC 2019
- 理想情况下,我希望避免证书,以避免(不懂技术的(最终用户不得不篡改证书
代码简介:
- 获取方法:TLS_client_method((
- 获取CTX:SSL_CTX_new(方法(
- 创建套接字"sock">
- 将sock连接到端口443上的主机
- 创建SSL*:SSL=SSL_new(ctx(
- SSL_set_fd(SSL、sock(
- SSL_connect(SSL([总是失败]
"无Applink";解释了失败——尽管它导致ERR_print_errors_fp也失败。
在Windows上,要将打开的文件或套接字从exe传递到OpenSSL库,如果链接为DLL(这是默认的,但可重写(,则必须编译并链接到应用程序exe中,提供的文件包括/OpenSSL/applink.c(注意.c不是.h--它是include文件,而不是 header在MSVC上,我认为你只需将此文件或副本"添加"到你的项目中,它就会自动编译和链接,但我自己不再使用它,也无法验证。您可能需要#将文件包括在适当的位置,如您的main.c.
好吧,简单回答我的问题。原来我测试的服务器有问题。当我试图连接到另一个时,例如;feistydack.com";或";google.com";在443端口,一切都很好。