CまたはC++でOpenSSLにサーバー名表示(SNI)を実装する方法
実例はありますか?
クライアント側では、SSL接続を開始する前にSSL_set_tlsext_Host_name(ssl, servername)
を使用します。
サーバー側では、少し複雑です。
SSL_CTX()
をセットアップします。SSL_CTX()
を使用して、各SSL_CTX_set_tlsext_servername_callback()
にservernameコールバックを追加します。SSL_get_servername(ssl, TLSEXT_NAMETYPE_Host_name)
を使用してクライアントが提供するサーバー名を取得します。そのホスト名に対応する正しい_SSL_CTX
_を見つけ出し、SSL
オブジェクトをSSL_set_SSL_CTX()
でその_SSL_CTX
_に切り替えます。OpenSSLソースディストリビューションの_s_client.c
_ディレクトリにある_s_server.c
_および_apps/
_ファイルはこの機能を実装しているため、どのように実行するかを確認するための優れたリソースです。