OpenSSL获取 tls sni
时间: 2023-07-16 13:13:10 浏览: 186
用OpenSSL进行TLS_SSL编程
3星 · 编辑精心推荐
要获取TLS SNI信息,您可以使用OpenSSL库中的回调函数。具体来说,您可以使用SSL_CTX_set_tlsext_servername_callback函数将回调函数注册到SSL上下文中,该函数将在TLS握手期间被调用以获取SNI信息。
以下是一个示例回调函数:
```
int sni_callback(SSL *ssl, int *ad, void *arg)
{
const char *servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
if (servername) {
printf("SNI: %s\n", servername);
}
return SSL_TLSEXT_ERR_OK;
}
```
您可以将此回调函数注册到SSL上下文中:
```
SSL_CTX *ctx = SSL_CTX_new(TLS_method());
SSL_CTX_set_tlsext_servername_callback(ctx, sni_callback);
```
然后,通过使用SSL_accept函数启动TLS握手,就可以获取SNI信息了。当客户端发送客户端Hello消息时,回调函数将被调用并打印SNI信息。
请注意,此代码仅适用于服务器端的TLS握手。如果您需要在客户端使用SNI,则可以使用SSL_set_tlsext_host_name函数设置SNI信息。
阅读全文