浏览代码

Test that SNI is accessible from the SNI callback.

Later work is going to cause some turbulence here.

Change-Id: Iba98bcf56e81492ec0dca54a381b38d1c115247a
Reviewed-on: https://boringssl-review.googlesource.com/11843
Reviewed-by: Adam Langley <agl@google.com>
Commit-Queue: Adam Langley <agl@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
kris/onging/CECPQ3_patch15
David Benjamin 8 年前
committed by CQ bot account: commit-bot@chromium.org
父节点
当前提交
8b176716e9
共有 2 个文件被更改,包括 23 次插入4 次删除
  1. +3
    -3
      include/openssl/ssl.h
  2. +20
    -1
      ssl/test/bssl_shim.cc

+ 3
- 3
include/openssl/ssl.h 查看文件

@@ -2331,9 +2331,9 @@ OPENSSL_EXPORT int SSL_get_servername_type(const SSL *ssl);

/* SSL_CTX_set_tlsext_servername_callback configures |callback| to be called on
* the server after ClientHello extensions have been parsed and returns one.
* The callback may use |SSL_get_servername| to examine the server_name extension
* and returns a |SSL_TLSEXT_ERR_*| value. The value of |arg| may be set by
* calling |SSL_CTX_set_tlsext_servername_arg|.
* The callback may use |SSL_get_servername| to examine the server_name
* extension and returns a |SSL_TLSEXT_ERR_*| value. The value of |arg| may be
* set by calling |SSL_CTX_set_tlsext_servername_arg|.
*
* If the callback returns |SSL_TLSEXT_ERR_NOACK|, the server_name extension is
* not acknowledged in the ServerHello. If the return value is


+ 20
- 1
ssl/test/bssl_shim.cc 查看文件

@@ -776,6 +776,20 @@ static int CustomExtensionParseCallback(SSL *ssl, unsigned extension_value,
return 1;
}

static int ServerNameCallback(SSL *ssl, int *out_alert, void *arg) {
// SNI must be accessible from the SNI callback.
const TestConfig *config = GetTestConfig(ssl);
const char *server_name = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
if (server_name == nullptr ||
std::string(server_name) != config->expected_server_name) {
fprintf(stderr, "servername mismatch (got %s; want %s)\n", server_name,
config->expected_server_name.c_str());
return SSL_TLSEXT_ERR_ALERT_FATAL;
}

return SSL_TLSEXT_ERR_OK;
}

// Connect returns a new socket connected to localhost on |port| or -1 on
// error.
static int Connect(uint16_t port) {
@@ -971,6 +985,10 @@ static bssl::UniquePtr<SSL_CTX> SetupCtx(const TestConfig *config) {
SSL_CTX_set_grease_enabled(ssl_ctx.get(), 1);
}

if (!config->expected_server_name.empty()) {
SSL_CTX_set_tlsext_servername_callback(ssl_ctx.get(), ServerNameCallback);
}

return ssl_ctx;
}

@@ -1171,7 +1189,8 @@ static bool CheckHandshakeProperties(SSL *ssl, bool is_resume) {
if (!config->expected_server_name.empty()) {
const char *server_name =
SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
if (server_name != config->expected_server_name) {
if (server_name == nullptr ||
server_name != config->expected_server_name) {
fprintf(stderr, "servername mismatch (got %s; want %s)\n",
server_name, config->expected_server_name.c_str());
return false;


正在加载...
取消
保存