无法使用OpenSSL 1.1.1从ClientHello检索服务器名称(SNI)

马丁

在运行的服务器上(使用OpenSSL 1.1.1d),我尝试使用以下回调API从ClientHello消息中提取服务器名称(SNI)扩展名

  • 调用SSL_client_hello_get0_extTLSEXT_TYPE_server_name类型中进行回购
  • 调用SSL_get_servernameTLSEXT_NAMETYPE_host_name 作为记录

但是似乎没有任何作用,SNI要么为NULL,要么为垃圾。

我注意到的一件事是,只有在完成ClientHello回调之后,我才能提取它,但是那时为时已晚。有人遇到过类似的问题吗?

在下面的最小代码示例中附加演示如何检索SNI的代码:

int
my_server::client_hello_cb(SSL *ssl, int *al, void *arg)
{
    my_server* server = static_cast<my_server*>(SSL_get_app_data(ssl));
    const char *sni = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);

    server->set_client_sni(sni);
    return 0;
}

void
my_server::create()
{
    SSL* ssl = SSL_new(ctx_);
    SSL_set_app_data(ssl, this);

    BIO* rbio = BIO_new(BIO_s_mem());
    BIO* wbio = BIO_new(BIO_s_mem());
    SSL_set_bio(ssl, rbio, wbio);

    SSL_CTX* ctx = SSL_CTX_new(TLS_server_method());

    SSL_CTX_set_ecdh_auto(ctx, 1);
    SSL_CTX_set_client_hello_cb(ctx, client_hello_cb, nullptr);
}
马丁

特别感谢Steffen清理了东西。

SSL_get_servername必须直接从服务器名称的回调被调用,therfore没有解决原来的问题。

相反,可以直接使用客户端hello回调手动解析服务器扩展名(如此处所述SSL_client_hello_get0_ext

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法下载Composer-具有SSH访问服务器的1and1

来自分类Dev

无法下载Composer-具有SSH访问服务器的1and1

来自分类Dev

无法在1&1服务器上运行exec()/ shell_exec()

来自分类Dev

使用:: 1表示ServerName无法可靠地确定服务器的标准域名

来自分类Dev

在第1行的'itid = 1'附近使用正确语法的MySQL服务器版本

来自分类Dev

使用1and1云服务器发送邮件失败

来自分类Dev

Openssl Asn1parse无法正确提取数据

来自分类Dev

代号1无法使用jar

来自分类Dev

使用 1:M 关系创建 1:1

来自分类Dev

1and1服务器上的Laravel

来自分类Dev

服务器返回非法容量-1

来自分类Dev

ArrayIndexOutOfBoundsException:Web服务器中的1

来自分类Dev

SVN服务器存储使用率与降低的内容大小有多接近1:1?

来自分类Dev

Glassfish服务器启动域domain1无法启动

来自分类Dev

Rails教程第1章:Rails服务器无法在Cloud9上运行

来自分类Dev

错误:(jupyter服务器崩溃。无法连接。来自jupyter的错误代码:1)

来自分类Dev

下拉列表中的数据无法发送到 IONIC v1 中的服务器

来自分类Dev

SSH 协议 V1(无法登录我的专用服务器)

来自分类Dev

使用Openssl asn1parse工具解码ASN.1消息

来自分类Dev

在Couchbase服务器中使用N1QL时出错

来自分类Dev

如何使用UEFI和RAID1 + LVM安装Ubuntu服务器

来自分类Dev

更改gremlin服务器中的默认序列化以使用GraphSON V1

来自分类Dev

如何使用UEFI和RAID1 + LVM安装Ubuntu服务器

来自分类Dev

Python 3.4-仅使用TLSv1连接到imap服务器

来自分类Dev

第1行的'@ hotmail.com'附近使用正确语法的MySQL服务器版本

来自分类Dev

错误的MySQL服务器版本,用于在第1行的''附近使用正确的语法

来自分类Dev

使用 GPT/UEFI 将 Ubuntu 18.04 服务器安装到 RAID1

来自分类Dev

使用 Spring Cloud Finchley RC1 的 Eureka 服务器

来自分类Dev

无法处理@“ 1”

Related 相关文章

  1. 1

    无法下载Composer-具有SSH访问服务器的1and1

  2. 2

    无法下载Composer-具有SSH访问服务器的1and1

  3. 3

    无法在1&1服务器上运行exec()/ shell_exec()

  4. 4

    使用:: 1表示ServerName无法可靠地确定服务器的标准域名

  5. 5

    在第1行的'itid = 1'附近使用正确语法的MySQL服务器版本

  6. 6

    使用1and1云服务器发送邮件失败

  7. 7

    Openssl Asn1parse无法正确提取数据

  8. 8

    代号1无法使用jar

  9. 9

    使用 1:M 关系创建 1:1

  10. 10

    1and1服务器上的Laravel

  11. 11

    服务器返回非法容量-1

  12. 12

    ArrayIndexOutOfBoundsException:Web服务器中的1

  13. 13

    SVN服务器存储使用率与降低的内容大小有多接近1:1?

  14. 14

    Glassfish服务器启动域domain1无法启动

  15. 15

    Rails教程第1章:Rails服务器无法在Cloud9上运行

  16. 16

    错误:(jupyter服务器崩溃。无法连接。来自jupyter的错误代码:1)

  17. 17

    下拉列表中的数据无法发送到 IONIC v1 中的服务器

  18. 18

    SSH 协议 V1(无法登录我的专用服务器)

  19. 19

    使用Openssl asn1parse工具解码ASN.1消息

  20. 20

    在Couchbase服务器中使用N1QL时出错

  21. 21

    如何使用UEFI和RAID1 + LVM安装Ubuntu服务器

  22. 22

    更改gremlin服务器中的默认序列化以使用GraphSON V1

  23. 23

    如何使用UEFI和RAID1 + LVM安装Ubuntu服务器

  24. 24

    Python 3.4-仅使用TLSv1连接到imap服务器

  25. 25

    第1行的'@ hotmail.com'附近使用正确语法的MySQL服务器版本

  26. 26

    错误的MySQL服务器版本,用于在第1行的''附近使用正确的语法

  27. 27

    使用 GPT/UEFI 将 Ubuntu 18.04 服务器安装到 RAID1

  28. 28

    使用 Spring Cloud Finchley RC1 的 Eureka 服务器

  29. 29

    无法处理@“ 1”

热门标签

归档