Я реализовал SNI, используя OpenSSL, но не используя конфигурационный файл OpenSSL (cnf). Я загружаю сервер SSL_CTX, выполняя следующие действия:
FILE *fp;
CONF *cnf = NULL;
long eline;
fp = fopen("/somepath/app.cnf", "r");
if (fp == NULL) {
fprintf(stderr, "Error opening configuration file\n");
/* Other missing configuration file behaviour */
} else {
cnf = NCONF_new(NULL);
if (NCONF_load_fp(cnf, fp, &eline) == 0) {
fprintf(stderr, "Error on line %ld of configuration file\n", eline);
ERR_print_errors_fp(stderr);
/* Other malformed configuration file behaviour */
} else if (CONF_modules_load(cnf, "appname", 0) <= 0) {
fprintf(stderr, "Error configuring application\n");
ERR_print_errors_fp(stderr);
/* Other configuration error behaviour */
}
fclose(fp);
NCONF_free(cnf);
}
Работает нормально, но сейчас я пытаюсь реализовать SNI на стороне сервера, используя конфигурационный файл OpenSSL, и я не знаю, как получить необходимую информацию для этого. Я взглянул на Как реализовать индикацию имени сервера (SNI) , и это хорошее объяснение, чтобы сделать это без конфигурационного файла openssl. Но это не работает с использованием файла.
Как я могу определить, запрошен ли у сервера сертификат? Может быть, openssl сам предоставит соответствующий сертификат?