|
@@ -95,6 +95,7 @@ turn_params_t turn_params = {
|
|
"", /*ca_cert_file*/
|
|
"", /*ca_cert_file*/
|
|
"turn_server_cert.pem", /*cert_file*/
|
|
"turn_server_cert.pem", /*cert_file*/
|
|
"turn_server_pkey.pem", /*pkey_file*/
|
|
"turn_server_pkey.pem", /*pkey_file*/
|
|
|
|
+ false, /*rpk_enabled*/
|
|
"", /*tls_password*/
|
|
"", /*tls_password*/
|
|
"", /*dh_file*/
|
|
"", /*dh_file*/
|
|
|
|
|
|
@@ -1412,6 +1413,7 @@ enum EXTRA_OPTS {
|
|
ALT_PORT_OPT,
|
|
ALT_PORT_OPT,
|
|
ALT_TLS_PORT_OPT,
|
|
ALT_TLS_PORT_OPT,
|
|
CERT_FILE_OPT,
|
|
CERT_FILE_OPT,
|
|
|
|
+ RPK_ENABLED_OPT,
|
|
PKEY_FILE_OPT,
|
|
PKEY_FILE_OPT,
|
|
PKEY_PWD_OPT,
|
|
PKEY_PWD_OPT,
|
|
MIN_PORT_OPT,
|
|
MIN_PORT_OPT,
|
|
@@ -1577,6 +1579,7 @@ static const struct myoption long_options[] = {
|
|
{"stun-only", optional_argument, NULL, 'S'},
|
|
{"stun-only", optional_argument, NULL, 'S'},
|
|
{"no-stun", optional_argument, NULL, NO_STUN_OPT},
|
|
{"no-stun", optional_argument, NULL, NO_STUN_OPT},
|
|
{"cert", required_argument, NULL, CERT_FILE_OPT},
|
|
{"cert", required_argument, NULL, CERT_FILE_OPT},
|
|
|
|
+ {"raw-public-keys", optional_argument, NULL, RPK_ENABLED_OPT},
|
|
{"pkey", required_argument, NULL, PKEY_FILE_OPT},
|
|
{"pkey", required_argument, NULL, PKEY_FILE_OPT},
|
|
{"pkey-pwd", required_argument, NULL, PKEY_PWD_OPT},
|
|
{"pkey-pwd", required_argument, NULL, PKEY_PWD_OPT},
|
|
{"log-file", required_argument, NULL, 'l'},
|
|
{"log-file", required_argument, NULL, 'l'},
|
|
@@ -2278,6 +2281,9 @@ static void set_option(int c, char *value) {
|
|
case CERT_FILE_OPT:
|
|
case CERT_FILE_OPT:
|
|
STRCPY(turn_params.cert_file, value);
|
|
STRCPY(turn_params.cert_file, value);
|
|
break;
|
|
break;
|
|
|
|
+ case RPK_ENABLED_OPT:
|
|
|
|
+ turn_params.rpk_enabled = get_bool_value(value);
|
|
|
|
+ break;
|
|
case CA_FILE_OPT:
|
|
case CA_FILE_OPT:
|
|
STRCPY(turn_params.ca_cert_file, value);
|
|
STRCPY(turn_params.ca_cert_file, value);
|
|
break;
|
|
break;
|
|
@@ -3826,6 +3832,18 @@ static void set_ctx(SSL_CTX **out, const char *protocol, const SSL_METHOD *metho
|
|
SSL_CTX_free(*out);
|
|
SSL_CTX_free(*out);
|
|
*out = ctx;
|
|
*out = ctx;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#if OPENSSL_VERSION_NUMBER >= 0x30200010L
|
|
|
|
+ if (turn_params.rpk_enabled) {
|
|
|
|
+ unsigned char cert_type = TLSEXT_cert_type_rpk;
|
|
|
|
+ if (!SSL_CTX_set1_server_cert_type(ctx, &cert_type, 1)) {
|
|
|
|
+ TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Could not enable raw public keys functionality (RFC7250)\n");
|
|
|
|
+ } else {
|
|
|
|
+ TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Raw Public Keys (RFC7250) enabled!\n");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
}
|
|
}
|
|
|
|
|
|
static void openssl_load_certificates(void);
|
|
static void openssl_load_certificates(void);
|