仅客户端 SSL/TLS 应用程序是否需要证书?
Are certificates required for client-only SSL/TLS apps?
我正在尝试开发一个最小的 客户端 SSL/TLS 应用程序来连接到 https 服务器。它总是在 'SSL_connect() 上失败。我还没有安装任何证书。
这种情况需要证书吗?
我在 SO 和其他地方找到了很多答案,这些答案在警告 “除非服务器要求”.
详情:
- 我正在使用 GitHub: 我从源代码构建的 OpenSSL 包。
- SSL_connect 之前的所有 SSL 调用都成功,
- 在调试时,我看到函数 'SSL_do_handshake' [returns -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) [总是失败]
“没有应用程序link”解释了失败的原因——尽管它导致 ERR_print_errors_fp 也失败了。
On Windows 将打开的文件或套接字从您的 exe 传递到 OpenSSL 库 if linked 作为 DLL(这是默认设置,但是可覆盖)你必须 编译并 link 将提供的文件 include/openssl/applink.c 编译到你的应用程序 exe 中(注意 .c 不是 .h -- 它是一个 include 文件而不是 header 文件)。请参阅 https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_Applink.html(虽然它很简短;我确信我在几十年前的某个地方看到过更好的解释,但我现在找不到了)。
在 MSVC 上,我 认为 你可以 'add' 这个文件,或者一个副本,到你的项目,它会自动编译和 linked ,但我自己不再使用它,无法验证。您可能 需要在适当的地方#include 文件,例如您的main.c .
好吧,简单回答我的问题。原来我测试的服务器有问题。当我尝试连接到另一个端口时,例如端口 443 上的“feistyduck.com”或“google.com”,一切都很好。
我正在尝试开发一个最小的 客户端 SSL/TLS 应用程序来连接到 https 服务器。它总是在 'SSL_connect() 上失败。我还没有安装任何证书。
这种情况需要证书吗?
我在 SO 和其他地方找到了很多答案,这些答案在警告 “除非服务器要求”.
详情:
- 我正在使用 GitHub: 我从源代码构建的 OpenSSL 包。
- SSL_connect 之前的所有 SSL 调用都成功,
- 在调试时,我看到函数 'SSL_do_handshake' [returns -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) [总是失败]
“没有应用程序link”解释了失败的原因——尽管它导致 ERR_print_errors_fp 也失败了。
On Windows 将打开的文件或套接字从您的 exe 传递到 OpenSSL 库 if linked 作为 DLL(这是默认设置,但是可覆盖)你必须 编译并 link 将提供的文件 include/openssl/applink.c 编译到你的应用程序 exe 中(注意 .c 不是 .h -- 它是一个 include 文件而不是 header 文件)。请参阅 https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_Applink.html(虽然它很简短;我确信我在几十年前的某个地方看到过更好的解释,但我现在找不到了)。
在 MSVC 上,我 认为 你可以 'add' 这个文件,或者一个副本,到你的项目,它会自动编译和 linked ,但我自己不再使用它,无法验证。您可能 需要在适当的地方#include 文件,例如您的main.c .
好吧,简单回答我的问题。原来我测试的服务器有问题。当我尝试连接到另一个端口时,例如端口 443 上的“feistyduck.com”或“google.com”,一切都很好。