如何在C或C ++中的OpenSSL上实现服务器名称指示(SNI)?
有没有现实世界的例子?
答案 0 :(得分:55)
在客户端,您在启动SSL连接之前使用SSL_set_tlsext_host_name(ssl, servername)
。
在服务器端,它有点复杂:
SSL_CTX()
; SSL_CTX()
; SSL_CTX_set_tlsext_servername_callback()
添加服务器名称回调
SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name)
检索客户端提供的服务器名称。找出与该主机名一致的SSL_CTX
,然后将SSL
对象切换为SSL_CTX
SSL_set_SSL_CTX()
。 OpenSSL源代码分发的s_client.c
目录中的s_server.c
和apps/
文件实现了此功能,因此它们是查看应如何完成的良好资源。