c - 如何实现服务器名称指示(SNI)

标签 c ssl openssl sni

如何使用 C 或 C++ 在 OpenSSL 上实现服务器名称指示 (SNI)?

是否有任何现实世界的例子可用?

最佳答案

在客户端,您使用 SSL_set_tlsext_host_name(ssl, servername)在启动 SSL 连接之前。

在服务器端,稍微复杂一点:

  • 设置额外的 SSL_CTX()对于每个不同的证书;
  • 为每个 SSL_CTX() 添加一个服务器名回调使用 SSL_CTX_set_tlsext_servername_callback() ;
  • 在回调中,使用 SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name) 检索客户端提供的服务器名称.右图SSL_CTX使用该主机名,然后切换 SSL反对 SSL_CTXSSL_set_SSL_CTX() .

s_client.cs_server.c apps/ 中的文件OpenSSL 源代码分发的目录实现了这个功能,因此它们是了解应该如何完成的一个很好的资源。

关于c - 如何实现服务器名称指示(SNI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113333/

相关文章:

c - 使用 3 个信号量的多个生产者和消费者

c - 用 C 写一个 shell

c - 不显式计算平方根的整数的最小约数

node.js - 如何制作socket io | node.js - 使用 SSL

android - Twilio Android SDK OpenSSL 漏洞

java - 使用或不使用 OpenSSL 将 SSL .pem 转换为 .p12

c - 对函数内的结构数组进行排序

java - 如何使用自定义 TrustManager 通过 SSL 连接到 POP3 服务器?

encryption - HTTPs 网址加密

c++ - OpenSSL-多线程环境-C++